﻿(function (q) {
  if ('object' == typeof exports && 'object' == typeof module)
    module.exports = q();
  else {
    if ('function' == typeof define && define.amd) return define([], q);
    this.CodeMirror = q();
  }
})(function () {
  function q(a, b) {
    if (!(this instanceof q)) return new q(a, b);
    this.options = b = b ? V(b) : {};
    V(qf, b, !1);
    wc(b);
    var c = b.value;
    'string' == typeof c && (c = new P(c, b.mode));
    this.doc = c;
    var d = new q.inputStyles[b.inputStyle](this),
      d = (this.display = new rf(a, c, d));
    d.wrapper.CodeMirror = this;
    Ad(this);
    Bd(this);
    b.lineWrapping && (this.display.wrapper.className += ' CodeMirror-wrap');
    b.autofocus && !ab && d.input.focus();
    Cd(this);
    this.state = {
      keyMaps: [],
      overlays: [],
      modeGen: 0,
      overwrite: !1,
      delayingBlurEvent: !1,
      focused: !1,
      suppressEdits: !1,
      pasteIncoming: !1,
      cutIncoming: !1,
      draggingText: !1,
      highlight: new bb(),
      keySeq: null,
      specialChars: null,
    };
    var e = this;
    B &&
      11 > C &&
      setTimeout(function () {
        e.display.input.reset(!0);
      }, 20);
    sf(this);
    Dd || (tf(), (Dd = !0));
    Ja(this);
    this.curOp.forceUpdate = !0;
    Ed(this, c);
    (b.autofocus && !ab) || e.hasFocus()
      ? setTimeout(cb(xc, this), 20)
      : db(this);
    for (var f in Ka) if (Ka.hasOwnProperty(f)) Ka[f](this, b[f], Fd);
    Gd(this);
    b.finishInit && b.finishInit(this);
    for (c = 0; c < yc.length; ++c) yc[c](this);
    La(this);
    J &&
      b.lineWrapping &&
      'optimizelegibility' == getComputedStyle(d.lineDiv).textRendering &&
      (d.lineDiv.style.textRendering = 'auto');
  }
  function rf(a, b, c) {
    this.input = c;
    this.scrollbarFiller = t('div', null, 'CodeMirror-scrollbar-filler');
    this.scrollbarFiller.setAttribute('cm-not-content', 'true');
    this.gutterFiller = t('div', null, 'CodeMirror-gutter-filler');
    this.gutterFiller.setAttribute('cm-not-content', 'true');
    this.lineDiv = t('div', null, 'CodeMirror-code');
    this.selectionDiv = t('div', null, null, 'position: relative; z-index: 1');
    this.cursorDiv = t('div', null, 'CodeMirror-cursors');
    this.measure = t('div', null, 'CodeMirror-measure');
    this.lineMeasure = t('div', null, 'CodeMirror-measure');
    this.lineSpace = t(
      'div',
      [
        this.measure,
        this.lineMeasure,
        this.selectionDiv,
        this.cursorDiv,
        this.lineDiv,
      ],
      null,
      'position: relative; outline: none'
    );
    this.mover = t(
      'div',
      [t('div', [this.lineSpace], 'CodeMirror-lines')],
      null,
      'position: relative'
    );
    this.sizer = t('div', [this.mover], 'CodeMirror-sizer');
    this.sizerWidth = null;
    this.heightForcer = t(
      'div',
      null,
      null,
      'position: absolute; height: ' + Hd + 'px; width: 1px;'
    );
    this.gutters = t('div', null, 'CodeMirror-gutters');
    this.lineGutter = null;
    this.scroller = t(
      'div',
      [this.sizer, this.heightForcer, this.gutters],
      'CodeMirror-scroll'
    );
    this.scroller.setAttribute('tabIndex', '-1');
    this.wrapper = t(
      'div',
      [this.scrollbarFiller, this.gutterFiller, this.scroller],
      'CodeMirror'
    );
    B &&
      8 > C &&
      ((this.gutters.style.zIndex = -1),
      (this.scroller.style.paddingRight = 0));
    J || (wa && ab) || (this.scroller.draggable = !0);
    a && (a.appendChild ? a.appendChild(this.wrapper) : a(this.wrapper));
    this.reportedViewFrom = this.reportedViewTo = this.viewFrom = this.viewTo =
      b.first;
    this.view = [];
    this.externalMeasured = this.renderedView = null;
    this.lastWrapHeight = this.lastWrapWidth = this.viewOffset = 0;
    this.updateLineNumbers = null;
    this.nativeBarWidth = this.barHeight = this.barWidth = 0;
    this.scrollbarsClipped = !1;
    this.lineNumWidth = this.lineNumInnerWidth = this.lineNumChars = null;
    this.alignWidgets = !1;
    this.maxLine = this.cachedCharWidth = this.cachedTextHeight = this.cachedPaddingH = null;
    this.maxLineLength = 0;
    this.maxLineChanged = !1;
    this.wheelDX = this.wheelDY = this.wheelStartX = this.wheelStartY = null;
    this.shift = !1;
    this.activeTouch = this.selForContextMenu = null;
    c.init(this);
  }
  function zc(a) {
    a.doc.mode = q.getMode(a.options, a.doc.modeOption);
    eb(a);
  }
  function eb(a) {
    a.doc.iter(function (a) {
      a.stateAfter && (a.stateAfter = null);
      a.styles && (a.styles = null);
    });
    a.doc.frontier = a.doc.first;
    fb(a, 100);
    a.state.modeGen++;
    a.curOp && Q(a);
  }
  function Id(a) {
    var b = xa(a.display),
      c = a.options.lineWrapping,
      d = c && Math.max(5, a.display.scroller.clientWidth / gb(a.display) - 3);
    return function (e) {
      if (ya(a.doc, e)) return 0;
      var f = 0;
      if (e.widgets)
        for (var g = 0; g < e.widgets.length; g++)
          e.widgets[g].height && (f += e.widgets[g].height);
      return c ? f + (Math.ceil(e.text.length / d) || 1) * b : f + b;
    };
  }
  function Ac(a) {
    var b = a.doc,
      c = Id(a);
    b.iter(function (a) {
      var b = c(a);
      b != a.height && ca(a, b);
    });
  }
  function Bd(a) {
    a.display.wrapper.className =
      a.display.wrapper.className.replace(/\s*cm-s-\S+/g, '') +
      a.options.theme.replace(/(^|\s)\s*/g, ' cm-s-');
    hb(a);
  }
  function ib(a) {
    Ad(a);
    Q(a);
    setTimeout(function () {
      Bc(a);
    }, 20);
  }
  function Ad(a) {
    var b = a.display.gutters,
      c = a.options.gutters;
    za(b);
    for (var d = 0; d < c.length; ++d) {
      var e = c[d],
        f = b.appendChild(t('div', null, 'CodeMirror-gutter ' + e));
      'CodeMirror-linenumbers' == e &&
        ((a.display.lineGutter = f),
        (f.style.width = (a.display.lineNumWidth || 1) + 'px'));
    }
    b.style.display = d ? '' : 'none';
    Cc(a);
  }
  function Cc(a) {
    a.display.sizer.style.marginLeft = a.display.gutters.offsetWidth + 'px';
  }
  function Kb(a) {
    if (0 == a.height) return 0;
    for (var b = a.text.length, c, d = a; (c = Aa(d, !0)); )
      (c = c.find(0, !0)), (d = c.from.line), (b += c.from.ch - c.to.ch);
    for (d = a; (c = Aa(d, !1)); )
      (c = c.find(0, !0)),
        (b -= d.text.length - c.from.ch),
        (d = c.to.line),
        (b += d.text.length - c.to.ch);
    return b;
  }
  function Dc(a) {
    var b = a.display;
    a = a.doc;
    b.maxLine = u(a, a.first);
    b.maxLineLength = Kb(b.maxLine);
    b.maxLineChanged = !0;
    a.iter(function (a) {
      var d = Kb(a);
      d > b.maxLineLength && ((b.maxLineLength = d), (b.maxLine = a));
    });
  }
  function wc(a) {
    var b = D(a.gutters, 'CodeMirror-linenumbers');
    -1 == b && a.lineNumbers
      ? (a.gutters = a.gutters.concat(['CodeMirror-linenumbers']))
      : -1 < b &&
        !a.lineNumbers &&
        ((a.gutters = a.gutters.slice(0)), a.gutters.splice(b, 1));
  }
  function jb(a) {
    var b = a.display,
      c = b.gutters.offsetWidth,
      d = Math.round(a.doc.height + Ec(a.display));
    return {
      clientHeight: b.scroller.clientHeight,
      viewHeight: b.wrapper.clientHeight,
      scrollWidth: b.scroller.scrollWidth,
      clientWidth: b.scroller.clientWidth,
      viewWidth: b.wrapper.clientWidth,
      barLeft: a.options.fixedGutter ? c : 0,
      docHeight: d,
      scrollHeight: d + da(a) + b.barHeight,
      nativeBarWidth: b.nativeBarWidth,
      gutterWidth: c,
    };
  }
  function Fc(a, b, c) {
    this.cm = c;
    var d = (this.vert = t(
        'div',
        [t('div', null, null, 'min-width: 1px')],
        'CodeMirror-vscrollbar'
      )),
      e = (this.horiz = t(
        'div',
        [t('div', null, null, 'height: 100%; min-height: 1px')],
        'CodeMirror-hscrollbar'
      ));
    a(d);
    a(e);
    v(d, 'scroll', function () {
      d.clientHeight && b(d.scrollTop, 'vertical');
    });
    v(e, 'scroll', function () {
      e.clientWidth && b(e.scrollLeft, 'horizontal');
    });
    this.checkedOverlay = !1;
    B &&
      8 > C &&
      (this.horiz.style.minHeight = this.vert.style.minWidth = '18px');
  }
  function Gc() {}
  function Cd(a) {
    a.display.scrollbars &&
      (a.display.scrollbars.clear(),
      a.display.scrollbars.addClass &&
        kb(a.display.wrapper, a.display.scrollbars.addClass));
    a.display.scrollbars = new q.scrollbarModel[a.options.scrollbarStyle](
      function (b) {
        a.display.wrapper.insertBefore(b, a.display.scrollbarFiller);
        v(b, 'mousedown', function () {
          a.state.focused &&
            setTimeout(function () {
              a.display.input.focus();
            }, 0);
        });
        b.setAttribute('cm-not-content', 'true');
      },
      function (b, c) {
        'horizontal' == c ? Ma(a, b) : lb(a, b);
      },
      a
    );
    a.display.scrollbars.addClass &&
      mb(a.display.wrapper, a.display.scrollbars.addClass);
  }
  function Na(a, b) {
    b || (b = jb(a));
    var c = a.display.barWidth,
      d = a.display.barHeight;
    Jd(a, b);
    for (
      var e = 0;
      (4 > e && c != a.display.barWidth) || d != a.display.barHeight;
      e++
    )
      c != a.display.barWidth && a.options.lineWrapping && Lb(a),
        Jd(a, jb(a)),
        (c = a.display.barWidth),
        (d = a.display.barHeight);
  }
  function Jd(a, b) {
    var c = a.display,
      d = c.scrollbars.update(b);
    c.sizer.style.paddingRight = (c.barWidth = d.right) + 'px';
    c.sizer.style.paddingBottom = (c.barHeight = d.bottom) + 'px';
    d.right && d.bottom
      ? ((c.scrollbarFiller.style.display = 'block'),
        (c.scrollbarFiller.style.height = d.bottom + 'px'),
        (c.scrollbarFiller.style.width = d.right + 'px'))
      : (c.scrollbarFiller.style.display = '');
    d.bottom && a.options.coverGutterNextToScrollbar && a.options.fixedGutter
      ? ((c.gutterFiller.style.display = 'block'),
        (c.gutterFiller.style.height = d.bottom + 'px'),
        (c.gutterFiller.style.width = b.gutterWidth + 'px'))
      : (c.gutterFiller.style.display = '');
  }
  function Hc(a, b, c) {
    var d = c && null != c.top ? Math.max(0, c.top) : a.scroller.scrollTop,
      d = Math.floor(d - a.lineSpace.offsetTop),
      e = c && null != c.bottom ? c.bottom : d + a.wrapper.clientHeight,
      d = Ba(b, d),
      e = Ba(b, e);
    if (c && c.ensure) {
      var f = c.ensure.from.line;
      c = c.ensure.to.line;
      f < d
        ? ((d = f), (e = Ba(b, ea(u(b, f)) + a.wrapper.clientHeight)))
        : Math.min(c, b.lastLine()) >= e &&
          ((d = Ba(b, ea(u(b, c)) - a.wrapper.clientHeight)), (e = c));
    }
    return { from: d, to: Math.max(e, d + 1) };
  }
  function Bc(a) {
    var b = a.display,
      c = b.view;
    if (b.alignWidgets || (b.gutters.firstChild && a.options.fixedGutter)) {
      for (
        var d = Ic(b) - b.scroller.scrollLeft + a.doc.scrollLeft,
          e = b.gutters.offsetWidth,
          f = d + 'px',
          g = 0;
        g < c.length;
        g++
      )
        if (!c[g].hidden) {
          a.options.fixedGutter && c[g].gutter && (c[g].gutter.style.left = f);
          var h = c[g].alignable;
          if (h) for (var k = 0; k < h.length; k++) h[k].style.left = f;
        }
      a.options.fixedGutter && (b.gutters.style.left = d + e + 'px');
    }
  }
  function Gd(a) {
    if (!a.options.lineNumbers) return !1;
    var b = a.doc,
      b = Jc(a.options, b.first + b.size - 1),
      c = a.display;
    if (b.length != c.lineNumChars) {
      var d = c.measure.appendChild(
          t('div', [t('div', b)], 'CodeMirror-linenumber CodeMirror-gutter-elt')
        ),
        e = d.firstChild.offsetWidth,
        d = d.offsetWidth - e;
      c.lineGutter.style.width = '';
      c.lineNumInnerWidth = Math.max(e, c.lineGutter.offsetWidth - d) + 1;
      c.lineNumWidth = c.lineNumInnerWidth + d;
      c.lineNumChars = c.lineNumInnerWidth ? b.length : -1;
      c.lineGutter.style.width = c.lineNumWidth + 'px';
      Cc(a);
      return !0;
    }
    return !1;
  }
  function Jc(a, b) {
    return String(a.lineNumberFormatter(b + a.firstLineNumber));
  }
  function Ic(a) {
    return (
      a.scroller.getBoundingClientRect().left -
      a.sizer.getBoundingClientRect().left
    );
  }
  function Mb(a, b, c) {
    var d = a.display;
    this.viewport = b;
    this.visible = Hc(d, a.doc, b);
    this.editorIsHidden = !d.wrapper.offsetWidth;
    this.wrapperHeight = d.wrapper.clientHeight;
    this.wrapperWidth = d.wrapper.clientWidth;
    this.oldDisplayWidth = pa(a);
    this.force = c;
    this.dims = Kc(a);
    this.events = [];
  }
  function Lc(a, b) {
    var c = a.display,
      d = a.doc;
    if (b.editorIsHidden) return qa(a), !1;
    if (
      !b.force &&
      b.visible.from >= c.viewFrom &&
      b.visible.to <= c.viewTo &&
      (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo) &&
      c.renderedView == c.view &&
      0 == Kd(a)
    )
      return !1;
    Gd(a) && (qa(a), (b.dims = Kc(a)));
    var e = d.first + d.size,
      f = Math.max(b.visible.from - a.options.viewportMargin, d.first),
      g = Math.min(e, b.visible.to + a.options.viewportMargin);
    c.viewFrom < f &&
      20 > f - c.viewFrom &&
      (f = Math.max(d.first, c.viewFrom));
    c.viewTo > g && 20 > c.viewTo - g && (g = Math.min(e, c.viewTo));
    ra && ((f = Mc(a.doc, f)), (g = Ld(a.doc, g)));
    d =
      f != c.viewFrom ||
      g != c.viewTo ||
      c.lastWrapHeight != b.wrapperHeight ||
      c.lastWrapWidth != b.wrapperWidth;
    e = a.display;
    0 == e.view.length || f >= e.viewTo || g <= e.viewFrom
      ? ((e.view = Nb(a, f, g)), (e.viewFrom = f))
      : (e.viewFrom > f
          ? (e.view = Nb(a, f, e.viewFrom).concat(e.view))
          : e.viewFrom < f && (e.view = e.view.slice(Ca(a, f))),
        (e.viewFrom = f),
        e.viewTo < g
          ? (e.view = e.view.concat(Nb(a, e.viewTo, g)))
          : e.viewTo > g && (e.view = e.view.slice(0, Ca(a, g))));
    e.viewTo = g;
    c.viewOffset = ea(u(a.doc, c.viewFrom));
    a.display.mover.style.top = c.viewOffset + 'px';
    g = Kd(a);
    if (
      !d &&
      0 == g &&
      !b.force &&
      c.renderedView == c.view &&
      (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo)
    )
      return !1;
    f = fa();
    4 < g && (c.lineDiv.style.display = 'none');
    uf(a, c.updateLineNumbers, b.dims);
    4 < g && (c.lineDiv.style.display = '');
    c.renderedView = c.view;
    f && fa() != f && f.offsetHeight && f.focus();
    za(c.cursorDiv);
    za(c.selectionDiv);
    c.gutters.style.height = 0;
    d &&
      ((c.lastWrapHeight = b.wrapperHeight),
      (c.lastWrapWidth = b.wrapperWidth),
      fb(a, 400));
    c.updateLineNumbers = null;
    return !0;
  }
  function Md(a, b) {
    for (var c = b.viewport, d = !0; ; d = !1) {
      if (!d || !a.options.lineWrapping || b.oldDisplayWidth == pa(a))
        if (
          (c &&
            null != c.top &&
            (c = {
              top: Math.min(a.doc.height + Ec(a.display) - Nc(a), c.top),
            }),
          (b.visible = Hc(a.display, a.doc, c)),
          b.visible.from >= a.display.viewFrom &&
            b.visible.to <= a.display.viewTo)
        )
          break;
      if (!Lc(a, b)) break;
      Lb(a);
      d = jb(a);
      nb(a);
      Oc(a, d);
      Na(a, d);
    }
    b.signal(a, 'update', a);
    if (
      a.display.viewFrom != a.display.reportedViewFrom ||
      a.display.viewTo != a.display.reportedViewTo
    )
      b.signal(a, 'viewportChange', a, a.display.viewFrom, a.display.viewTo),
        (a.display.reportedViewFrom = a.display.viewFrom),
        (a.display.reportedViewTo = a.display.viewTo);
  }
  function Pc(a, b) {
    var c = new Mb(a, b);
    if (Lc(a, c)) {
      Lb(a);
      Md(a, c);
      var d = jb(a);
      nb(a);
      Oc(a, d);
      Na(a, d);
      c.finish();
    }
  }
  function Oc(a, b) {
    a.display.sizer.style.minHeight = b.docHeight + 'px';
    var c = b.docHeight + a.display.barHeight;
    a.display.heightForcer.style.top = c + 'px';
    a.display.gutters.style.height = Math.max(c + da(a), b.clientHeight) + 'px';
  }
  function Lb(a) {
    a = a.display;
    for (var b = a.lineDiv.offsetTop, c = 0; c < a.view.length; c++) {
      var d = a.view[c],
        e;
      if (!d.hidden) {
        if (B && 8 > C) {
          var f = d.node.offsetTop + d.node.offsetHeight;
          e = f - b;
          b = f;
        } else (e = d.node.getBoundingClientRect()), (e = e.bottom - e.top);
        f = d.line.height - e;
        2 > e && (e = xa(a));
        if (0.001 < f || -0.001 > f)
          if ((ca(d.line, e), Nd(d.line), d.rest))
            for (e = 0; e < d.rest.length; e++) Nd(d.rest[e]);
      }
    }
  }
  function Nd(a) {
    if (a.widgets)
      for (var b = 0; b < a.widgets.length; ++b)
        a.widgets[b].height = a.widgets[b].node.offsetHeight;
  }
  function Kc(a) {
    for (
      var b = a.display,
        c = {},
        d = {},
        e = b.gutters.clientLeft,
        f = b.gutters.firstChild,
        g = 0;
      f;
      f = f.nextSibling, ++g
    )
      (c[a.options.gutters[g]] = f.offsetLeft + f.clientLeft + e),
        (d[a.options.gutters[g]] = f.clientWidth);
    return {
      fixedPos: Ic(b),
      gutterTotalWidth: b.gutters.offsetWidth,
      gutterLeft: c,
      gutterWidth: d,
      wrapperWidth: b.wrapper.clientWidth,
    };
  }
  function uf(a, b, c) {
    function d(b) {
      var c = b.nextSibling;
      J && W && a.display.currentWheelTarget == b
        ? (b.style.display = 'none')
        : b.parentNode.removeChild(b);
      return c;
    }
    for (
      var e = a.display,
        f = a.options.lineNumbers,
        g = e.lineDiv,
        h = g.firstChild,
        k = e.view,
        e = e.viewFrom,
        l = 0;
      l < k.length;
      l++
    ) {
      var m = k[l];
      if (!m.hidden)
        if (m.node && m.node.parentNode == g) {
          for (; h != m.node; ) h = d(h);
          h = f && null != b && b <= e && m.lineNumber;
          m.changes &&
            (-1 < D(m.changes, 'gutter') && (h = !1), Od(a, m, e, c));
          h &&
            (za(m.lineNumber),
            m.lineNumber.appendChild(
              document.createTextNode(Jc(a.options, e))
            ));
          h = m.node.nextSibling;
        } else {
          var p = vf(a, m, e, c);
          g.insertBefore(p, h);
        }
      e += m.size;
    }
    for (; h; ) h = d(h);
  }
  function Od(a, b, c, d) {
    for (var e = 0; e < b.changes.length; e++) {
      var f = b.changes[e];
      if ('text' == f) {
        var f = b,
          g = f.text.className,
          h = Pd(a, f);
        f.text == f.node && (f.node = h.pre);
        f.text.parentNode.replaceChild(h.pre, f.text);
        f.text = h.pre;
        h.bgClass != f.bgClass || h.textClass != f.textClass
          ? ((f.bgClass = h.bgClass), (f.textClass = h.textClass), Qc(f))
          : g && (f.text.className = g);
      } else if ('gutter' == f) Qd(a, b, c, d);
      else if ('class' == f) Qc(b);
      else if ('widget' == f) {
        f = a;
        g = b;
        h = d;
        g.alignable && (g.alignable = null);
        for (var k = g.node.firstChild, l = void 0; k; k = l)
          (l = k.nextSibling),
            'CodeMirror-linewidget' == k.className && g.node.removeChild(k);
        Rd(f, g, h);
      }
    }
    b.changes = null;
  }
  function Ob(a) {
    a.node == a.text &&
      ((a.node = t('div', null, null, 'position: relative')),
      a.text.parentNode && a.text.parentNode.replaceChild(a.node, a.text),
      a.node.appendChild(a.text),
      B && 8 > C && (a.node.style.zIndex = 2));
    return a.node;
  }
  function Pd(a, b) {
    var c = a.display.externalMeasured;
    return c && c.line == b.line
      ? ((a.display.externalMeasured = null), (b.measure = c.measure), c.built)
      : Sd(a, b);
  }
  function Qc(a) {
    var b = a.bgClass
      ? a.bgClass + ' ' + (a.line.bgClass || '')
      : a.line.bgClass;
    b && (b += ' CodeMirror-linebackground');
    if (a.background)
      b
        ? (a.background.className = b)
        : (a.background.parentNode.removeChild(a.background),
          (a.background = null));
    else if (b) {
      var c = Ob(a);
      a.background = c.insertBefore(t('div', null, b), c.firstChild);
    }
    a.line.wrapClass
      ? (Ob(a).className = a.line.wrapClass)
      : a.node != a.text && (a.node.className = '');
    a.text.className =
      (a.textClass
        ? a.textClass + ' ' + (a.line.textClass || '')
        : a.line.textClass) || '';
  }
  function Qd(a, b, c, d) {
    b.gutter && (b.node.removeChild(b.gutter), (b.gutter = null));
    var e = b.line.gutterMarkers;
    if (a.options.lineNumbers || e) {
      var f = Ob(b),
        g = (b.gutter = t(
          'div',
          null,
          'CodeMirror-gutter-wrapper',
          'left: ' +
            (a.options.fixedGutter ? d.fixedPos : -d.gutterTotalWidth) +
            'px; width: ' +
            d.gutterTotalWidth +
            'px'
        ));
      a.display.input.setUneditable(g);
      f.insertBefore(g, b.text);
      b.line.gutterClass && (g.className += ' ' + b.line.gutterClass);
      !a.options.lineNumbers ||
        (e && e['CodeMirror-linenumbers']) ||
        (b.lineNumber = g.appendChild(
          t(
            'div',
            Jc(a.options, c),
            'CodeMirror-linenumber CodeMirror-gutter-elt',
            'left: ' +
              d.gutterLeft['CodeMirror-linenumbers'] +
              'px; width: ' +
              a.display.lineNumInnerWidth +
              'px'
          )
        ));
      if (e)
        for (b = 0; b < a.options.gutters.length; ++b)
          (c = a.options.gutters[b]),
            (f = e.hasOwnProperty(c) && e[c]) &&
              g.appendChild(
                t(
                  'div',
                  [f],
                  'CodeMirror-gutter-elt',
                  'left: ' +
                    d.gutterLeft[c] +
                    'px; width: ' +
                    d.gutterWidth[c] +
                    'px'
                )
              );
    }
  }
  function vf(a, b, c, d) {
    var e = Pd(a, b);
    b.text = b.node = e.pre;
    e.bgClass && (b.bgClass = e.bgClass);
    e.textClass && (b.textClass = e.textClass);
    Qc(b);
    Qd(a, b, c, d);
    Rd(a, b, d);
    return b.node;
  }
  function Rd(a, b, c) {
    Td(a, b.line, b, c, !0);
    if (b.rest)
      for (var d = 0; d < b.rest.length; d++) Td(a, b.rest[d], b, c, !1);
  }
  function Td(a, b, c, d, e) {
    if (b.widgets) {
      var f = Ob(c),
        g = 0;
      for (b = b.widgets; g < b.length; ++g) {
        var h = b[g],
          k = t('div', [h.node], 'CodeMirror-linewidget');
        h.handleMouseEvents || k.setAttribute('cm-ignore-events', 'true');
        var l = h,
          m = k,
          p = d;
        if (l.noHScroll) {
          (c.alignable || (c.alignable = [])).push(m);
          var n = p.wrapperWidth;
          m.style.left = p.fixedPos + 'px';
          l.coverGutter ||
            ((n -= p.gutterTotalWidth),
            (m.style.paddingLeft = p.gutterTotalWidth + 'px'));
          m.style.width = n + 'px';
        }
        l.coverGutter &&
          ((m.style.zIndex = 5),
          (m.style.position = 'relative'),
          l.noHScroll || (m.style.marginLeft = -p.gutterTotalWidth + 'px'));
        a.display.input.setUneditable(k);
        e && h.above ? f.insertBefore(k, c.gutter || c.text) : f.appendChild(k);
        L(h, 'redraw');
      }
    }
  }
  function Rc(a) {
    return r(a.line, a.ch);
  }
  function Pb(a, b) {
    return 0 > y(a, b) ? b : a;
  }
  function Qb(a, b) {
    return 0 > y(a, b) ? a : b;
  }
  function Ud(a) {
    a.state.focused || (a.display.input.focus(), xc(a));
  }
  function Rb(a) {
    return a.options.readOnly || a.doc.cantEdit;
  }
  function Sc(a, b, c, d, e) {
    var f = a.doc;
    a.display.shift = !1;
    d || (d = f.sel);
    var g = sa(b),
      h = null;
    a.state.pasteIncoming &&
      1 < d.ranges.length &&
      (X && X.join('\n') == b
        ? (h = 0 == d.ranges.length % X.length && ob(X, sa))
        : g.length == d.ranges.length &&
          (h = ob(g, function (a) {
            return [a];
          })));
    for (var k = d.ranges.length - 1; 0 <= k; k--) {
      var l = d.ranges[k],
        m = l.from(),
        p = l.to();
      l.empty() &&
        (c && 0 < c
          ? (m = r(m.line, m.ch - c))
          : a.state.overwrite &&
            !a.state.pasteIncoming &&
            (p = r(
              p.line,
              Math.min(u(f, p.line).text.length, p.ch + A(g).length)
            )));
      var n = a.curOp.updateInput,
        m = {
          from: m,
          to: p,
          text: h ? h[k % h.length] : g,
          origin:
            e ||
            (a.state.pasteIncoming
              ? 'paste'
              : a.state.cutIncoming
              ? 'cut'
              : '+input'),
        };
      Oa(a.doc, m);
      L(a, 'inputRead', a, m);
      if (
        b &&
        !a.state.pasteIncoming &&
        a.options.electricChars &&
        a.options.smartIndent &&
        100 > l.head.ch &&
        (!k || d.ranges[k - 1].head.line != l.head.line)
      ) {
        l = a.getModeAt(l.head);
        m = ta(m);
        p = !1;
        if (l.electricChars)
          for (var E = 0; E < l.electricChars.length; E++) {
            if (-1 < b.indexOf(l.electricChars.charAt(E))) {
              p = pb(a, m.line, 'smart');
              break;
            }
          }
        else
          l.electricInput &&
            l.electricInput.test(u(f, m.line).text.slice(0, m.ch)) &&
            (p = pb(a, m.line, 'smart'));
        p && L(a, 'electricInput', a, m.line);
      }
    }
    Pa(a);
    a.curOp.updateInput = n;
    a.curOp.typing = !0;
    a.state.pasteIncoming = a.state.cutIncoming = !1;
  }
  function Vd(a) {
    for (var b = [], c = [], d = 0; d < a.doc.sel.ranges.length; d++) {
      var e = a.doc.sel.ranges[d].head.line,
        e = { anchor: r(e, 0), head: r(e + 1, 0) };
      c.push(e);
      b.push(a.getRange(e.anchor, e.head));
    }
    return { text: b, ranges: c };
  }
  function Wd(a) {
    a.setAttribute('autocorrect', 'off');
    a.setAttribute('autocapitalize', 'off');
    a.setAttribute('spellcheck', 'false');
  }
  function Tc(a) {
    this.cm = a;
    this.prevInput = '';
    this.pollingFast = !1;
    this.polling = new bb();
    this.hasSelection = this.inaccurateSelection = !1;
    this.composing = null;
  }
  function Xd() {
    var a = t(
        'textarea',
        null,
        null,
        'position: absolute; padding: 0; width: 1px; height: 1em; outline: none'
      ),
      b = t(
        'div',
        [a],
        null,
        'overflow: hidden; position: relative; width: 3px; height: 0px;'
      );
    J ? (a.style.width = '1000px') : a.setAttribute('wrap', 'off');
    Qa && (a.style.border = '1px solid black');
    Wd(a);
    return b;
  }
  function Uc(a) {
    this.cm = a;
    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
    this.polling = new bb();
    this.gracePeriod = !1;
  }
  function Yd(a, b) {
    var c = Vc(a, b.line);
    if (!c || c.hidden) return null;
    var d = u(a.doc, b.line),
      c = Zd(c, d, b.line);
    (d = Y(d)) && Sb(d, b.ch);
    d = $d(c.map, b.ch, 'left');
    d.offset = 'right' == d.collapse ? d.end : d.start;
    return d;
  }
  function Ra(a, b) {
    b && (a.bad = !0);
    return a;
  }
  function Tb(a, b, c) {
    var d;
    if (b == a.display.lineDiv) {
      d = a.display.lineDiv.childNodes[c];
      if (!d) return Ra(a.clipPos(r(a.display.viewTo - 1)), !0);
      b = null;
      c = 0;
    } else
      for (d = b; ; d = d.parentNode) {
        if (!d || d == a.display.lineDiv) return null;
        if (d.parentNode && d.parentNode == a.display.lineDiv) break;
      }
    for (var e = 0; e < a.display.view.length; e++) {
      var f = a.display.view[e];
      if (f.node == d) return wf(f, b, c);
    }
  }
  function wf(a, b, c) {
    function d(b, c, d) {
      for (var e = -1; e < (l ? l.length : 0); e++)
        for (var f = 0 > e ? k.map : l[e], g = 0; g < f.length; g += 3) {
          var h = f[g + 2];
          if (h == b || h == c) {
            c = F(0 > e ? a.line : a.rest[e]);
            e = f[g] + d;
            if (0 > d || h != b) e = f[g + (d ? 1 : 0)];
            return r(c, e);
          }
        }
    }
    var e = a.text.firstChild,
      f = !1;
    if (!b || !Wc(e, b)) return Ra(r(F(a.line), 0), !0);
    if (b == e && ((f = !0), (b = e.childNodes[c]), (c = 0), !b))
      return (c = a.rest ? A(a.rest) : a.line), Ra(r(F(c), c.text.length), f);
    var g = 3 == b.nodeType ? b : null,
      h = b;
    g ||
      1 != b.childNodes.length ||
      3 != b.firstChild.nodeType ||
      ((g = b.firstChild), c && (c = g.nodeValue.length));
    for (; h.parentNode != e; ) h = h.parentNode;
    var k = a.measure,
      l = k.maps;
    if ((b = d(g, h, c))) return Ra(b, f);
    e = h.nextSibling;
    for (g = g ? g.nodeValue.length - c : 0; e; e = e.nextSibling) {
      if ((b = d(e, e.firstChild, 0))) return Ra(r(b.line, b.ch - g), f);
      g += e.textContent.length;
    }
    h = h.previousSibling;
    for (g = c; h; h = h.previousSibling) {
      if ((b = d(h, h.firstChild, -1))) return Ra(r(b.line, b.ch + g), f);
      g += e.textContent.length;
    }
  }
  function xf(a, b, c, d, e) {
    function f(a) {
      return function (b) {
        return b.id == a;
      };
    }
    function g(b) {
      if (1 == b.nodeType) {
        var c = b.getAttribute('cm-text');
        if (null != c)
          '' == c && (c = b.textContent.replace(/\u200b/g, '')), (h += c);
        else {
          var c = b.getAttribute('cm-marker'),
            p;
          if (c)
            (b = a.findMarks(r(d, 0), r(e + 1, 0), f(+c))),
              b.length &&
                (p = b[0].find()) &&
                (h += Da(a.doc, p.from, p.to).join('\n'));
          else if ('false' != b.getAttribute('contenteditable')) {
            for (p = 0; p < b.childNodes.length; p++) g(b.childNodes[p]);
            /^(pre|div|p)$/i.test(b.nodeName) && (k = !0);
          }
        }
      } else 3 == b.nodeType && (b = b.nodeValue) && (k && ((h += '\n'), (k = !1)), (h += b));
    }
    for (var h = '', k = !1; ; ) {
      g(b);
      if (b == c) break;
      b = b.nextSibling;
    }
    return h;
  }
  function la(a, b) {
    this.ranges = a;
    this.primIndex = b;
  }
  function z(a, b) {
    this.anchor = a;
    this.head = b;
  }
  function Z(a, b) {
    var c = a[b];
    a.sort(function (a, b) {
      return y(a.from(), b.from());
    });
    b = D(a, c);
    for (c = 1; c < a.length; c++) {
      var d = a[c],
        e = a[c - 1];
      if (0 <= y(e.to(), d.from())) {
        var f = Qb(e.from(), d.from()),
          g = Pb(e.to(), d.to()),
          d = e.empty() ? d.from() == d.head : e.from() == e.head;
        c <= b && --b;
        a.splice(--c, 2, new z(d ? g : f, d ? f : g));
      }
    }
    return new la(a, b);
  }
  function ga(a, b) {
    return new la([new z(a, b || a)], 0);
  }
  function w(a, b) {
    if (b.line < a.first) return r(a.first, 0);
    var c = a.first + a.size - 1;
    if (b.line > c) return r(c, u(a, c).text.length);
    var c = u(a, b.line).text.length,
      d = b.ch,
      c = null == d || d > c ? r(b.line, c) : 0 > d ? r(b.line, 0) : b;
    return c;
  }
  function qb(a, b) {
    return b >= a.first && b < a.first + a.size;
  }
  function rb(a, b, c, d) {
    return (a.cm && a.cm.display.shift) || a.extend
      ? ((a = b.anchor),
        d &&
          ((b = 0 > y(c, a)),
          b != 0 > y(d, a) ? ((a = c), (c = d)) : b != 0 > y(c, d) && (c = d)),
        new z(a, c))
      : new z(d || c, c);
  }
  function Ub(a, b, c, d) {
    H(a, new la([rb(a, a.sel.primary(), b, c)], 0), d);
  }
  function ae(a, b, c) {
    for (var d = [], e = 0; e < a.sel.ranges.length; e++)
      d[e] = rb(a, a.sel.ranges[e], b[e], null);
    b = Z(d, a.sel.primIndex);
    H(a, b, c);
  }
  function Xc(a, b, c, d) {
    var e = a.sel.ranges.slice(0);
    e[b] = c;
    H(a, Z(e, a.sel.primIndex), d);
  }
  function yf(a, b) {
    var c = {
      ranges: b.ranges,
      update: function (b) {
        this.ranges = [];
        for (var c = 0; c < b.length; c++)
          this.ranges[c] = new z(w(a, b[c].anchor), w(a, b[c].head));
      },
    };
    K(a, 'beforeSelectionChange', a, c);
    a.cm && K(a.cm, 'beforeSelectionChange', a.cm, c);
    return c.ranges != b.ranges ? Z(c.ranges, c.ranges.length - 1) : b;
  }
  function be(a, b, c) {
    var d = a.history.done,
      e = A(d);
    e && e.ranges ? ((d[d.length - 1] = b), Vb(a, b, c)) : H(a, b, c);
  }
  function H(a, b, c) {
    Vb(a, b, c);
    b = a.sel;
    var d = a.cm ? a.cm.curOp.id : NaN,
      e = a.history,
      f = c && c.origin,
      g;
    if (
      !(g = d == e.lastSelOp) &&
      (g = f && e.lastSelOrigin == f) &&
      !(g = e.lastModTime == e.lastSelTime && e.lastOrigin == f)
    ) {
      g = A(e.done);
      var h = f.charAt(0);
      g =
        '*' == h ||
        ('+' == h &&
          g.ranges.length == b.ranges.length &&
          g.somethingSelected() == b.somethingSelected() &&
          new Date() - a.history.lastSelTime <=
            (a.cm ? a.cm.options.historyEventDelay : 500));
    }
    g ? (e.done[e.done.length - 1] = b) : Wb(b, e.done);
    e.lastSelTime = +new Date();
    e.lastSelOrigin = f;
    e.lastSelOp = d;
    c && !1 !== c.clearRedo && ce(e.undone);
  }
  function Vb(a, b, c) {
    if (
      S(a, 'beforeSelectionChange') ||
      (a.cm && S(a.cm, 'beforeSelectionChange'))
    )
      b = yf(a, b);
    var d =
      (c && c.bias) || (0 > y(b.primary().head, a.sel.primary().head) ? -1 : 1);
    de(a, ee(a, b, d, !0));
    (c && !1 === c.scroll) || !a.cm || Pa(a.cm);
  }
  function de(a, b) {
    b.equals(a.sel) ||
      ((a.sel = b),
      a.cm &&
        ((a.cm.curOp.updateInput = a.cm.curOp.selectionChanged = !0), fe(a.cm)),
      L(a, 'cursorActivity', a));
  }
  function ge(a) {
    de(a, ee(a, a.sel, null, !1), ha);
  }
  function ee(a, b, c, d) {
    for (var e, f = 0; f < b.ranges.length; f++) {
      var g = b.ranges[f],
        h = Xb(a, g.anchor, c, d),
        k = Xb(a, g.head, c, d);
      if (e || h != g.anchor || k != g.head)
        e || (e = b.ranges.slice(0, f)), (e[f] = new z(h, k));
    }
    return e ? Z(e, b.primIndex) : b;
  }
  function Xb(a, b, c, d) {
    var e = !1,
      f = b,
      g = c || 1;
    a.cantEdit = !1;
    a: for (;;) {
      var h = u(a, f.line);
      if (h.markedSpans)
        for (var k = 0; k < h.markedSpans.length; ++k) {
          var l = h.markedSpans[k],
            m = l.marker;
          if (
            (null == l.from ||
              (m.inclusiveLeft ? l.from <= f.ch : l.from < f.ch)) &&
            (null == l.to || (m.inclusiveRight ? l.to >= f.ch : l.to > f.ch))
          ) {
            if (d && (K(m, 'beforeCursorEnter'), m.explicitlyCleared))
              if (h.markedSpans) {
                --k;
                continue;
              } else break;
            if (m.atomic) {
              k = m.find(0 > g ? -1 : 1);
              if (
                0 == y(k, f) &&
                ((k.ch += g),
                0 > k.ch
                  ? (k = k.line > a.first ? w(a, r(k.line - 1)) : null)
                  : k.ch > h.text.length &&
                    (k =
                      k.line < a.first + a.size - 1 ? r(k.line + 1, 0) : null),
                !k)
              ) {
                if (e) {
                  if (!d) return Xb(a, b, c, !0);
                  a.cantEdit = !0;
                  return r(a.first, 0);
                }
                e = !0;
                k = b;
                g = -g;
              }
              f = k;
              continue a;
            }
          }
        }
      return f;
    }
  }
  function nb(a) {
    a.display.input.showSelection(a.display.input.prepareSelection());
  }
  function he(a, b) {
    for (
      var c = a.doc,
        d = {},
        e = (d.cursors = document.createDocumentFragment()),
        f = (d.selection = document.createDocumentFragment()),
        g = 0;
      g < c.sel.ranges.length;
      g++
    )
      if (!1 !== b || g != c.sel.primIndex) {
        var h = c.sel.ranges[g],
          k = h.empty();
        if (k || a.options.showCursorWhenSelecting) {
          var l = a,
            m = e,
            p = ma(
              l,
              h.head,
              'div',
              null,
              null,
              !l.options.singleCursorHeightPerLine
            ),
            n = m.appendChild(t('div', ' ', 'CodeMirror-cursor'));
          n.style.left = p.left + 'px';
          n.style.top = p.top + 'px';
          n.style.height =
            Math.max(0, p.bottom - p.top) * l.options.cursorHeight + 'px';
          p.other &&
            ((l = m.appendChild(
              t('div', ' ', 'CodeMirror-cursor CodeMirror-secondarycursor')
            )),
            (l.style.display = ''),
            (l.style.left = p.other.left + 'px'),
            (l.style.top = p.other.top + 'px'),
            (l.style.height = 0.85 * (p.other.bottom - p.other.top) + 'px'));
        }
        k || zf(a, h, f);
      }
    return d;
  }
  function zf(a, b, c) {
    function d(a, b, c, d) {
      0 > b && (b = 0);
      b = Math.round(b);
      d = Math.round(d);
      h.appendChild(
        t(
          'div',
          null,
          'CodeMirror-selected',
          'position: absolute; left: ' +
            a +
            'px; top: ' +
            b +
            'px; width: ' +
            (null == c ? m - a : c) +
            'px; height: ' +
            (d - b) +
            'px'
        )
      );
    }
    function e(b, c, e) {
      var f = u(g, b),
        h = f.text.length,
        k,
        p;
      Af(Y(f), c || 0, null == e ? h : e, function (g, q, t) {
        var u = Yb(a, r(b, g), 'div', f, 'left'),
          v,
          w;
        g == q
          ? ((v = u), (t = w = u.left))
          : ((v = Yb(a, r(b, q - 1), 'div', f, 'right')),
            'rtl' == t && ((t = u), (u = v), (v = t)),
            (t = u.left),
            (w = v.right));
        null == c && 0 == g && (t = l);
        3 < v.top - u.top &&
          (d(t, u.top, null, u.bottom),
          (t = l),
          u.bottom < v.top && d(t, u.bottom, null, v.top));
        null == e && q == h && (w = m);
        if (!k || u.top < k.top || (u.top == k.top && u.left < k.left)) k = u;
        if (
          !p ||
          v.bottom > p.bottom ||
          (v.bottom == p.bottom && v.right > p.right)
        )
          p = v;
        t < l + 1 && (t = l);
        d(t, v.top, w - t, v.bottom);
      });
      return { start: k, end: p };
    }
    var f = a.display,
      g = a.doc,
      h = document.createDocumentFragment(),
      k = ie(a.display),
      l = k.left,
      m = Math.max(f.sizerWidth, pa(a) - f.sizer.offsetLeft) - k.right,
      f = b.from();
    b = b.to();
    if (f.line == b.line) e(f.line, f.ch, b.ch);
    else {
      var p = u(g, f.line),
        k = u(g, b.line),
        k = ia(p) == ia(k),
        f = e(f.line, f.ch, k ? p.text.length + 1 : null).end;
      b = e(b.line, k ? 0 : null, b.ch).start;
      k &&
        (f.top < b.top - 2
          ? (d(f.right, f.top, null, f.bottom), d(l, b.top, b.left, b.bottom))
          : d(f.right, f.top, b.left - f.right, f.bottom));
      f.bottom < b.top && d(l, f.bottom, null, b.top);
    }
    c.appendChild(h);
  }
  function Yc(a) {
    if (a.state.focused) {
      var b = a.display;
      clearInterval(b.blinker);
      var c = !0;
      b.cursorDiv.style.visibility = '';
      0 < a.options.cursorBlinkRate
        ? (b.blinker = setInterval(function () {
            b.cursorDiv.style.visibility = (c = !c) ? '' : 'hidden';
          }, a.options.cursorBlinkRate))
        : 0 > a.options.cursorBlinkRate &&
          (b.cursorDiv.style.visibility = 'hidden');
    }
  }
  function fb(a, b) {
    a.doc.mode.startState &&
      a.doc.frontier < a.display.viewTo &&
      a.state.highlight.set(b, cb(Bf, a));
  }
  function Bf(a) {
    var b = a.doc;
    b.frontier < b.first && (b.frontier = b.first);
    if (!(b.frontier >= a.display.viewTo)) {
      var c = +new Date() + a.options.workTime,
        d = Sa(b.mode, sb(a, b.frontier)),
        e = [];
      b.iter(
        b.frontier,
        Math.min(b.first + b.size, a.display.viewTo + 500),
        function (f) {
          if (b.frontier >= a.display.viewFrom) {
            var g = f.styles,
              h = je(a, f, d, !0);
            f.styles = h.styles;
            var k = f.styleClasses;
            (h = h.classes)
              ? (f.styleClasses = h)
              : k && (f.styleClasses = null);
            k =
              !g ||
              g.length != f.styles.length ||
              (k != h &&
                (!k ||
                  !h ||
                  k.bgClass != h.bgClass ||
                  k.textClass != h.textClass));
            for (h = 0; !k && h < g.length; ++h) k = g[h] != f.styles[h];
            k && e.push(b.frontier);
            f.stateAfter = Sa(b.mode, d);
          } else
            Zc(a, f.text, d),
              (f.stateAfter = 0 == b.frontier % 5 ? Sa(b.mode, d) : null);
          ++b.frontier;
          if (+new Date() > c) return fb(a, a.options.workDelay), !0;
        }
      );
      e.length &&
        T(a, function () {
          for (var b = 0; b < e.length; b++) na(a, e[b], 'text');
        });
    }
  }
  function Cf(a, b, c) {
    for (
      var d, e, f = a.doc, g = c ? -1 : b - (a.doc.mode.innerMode ? 1e3 : 100);
      b > g;
      --b
    ) {
      if (b <= f.first) return f.first;
      var h = u(f, b - 1);
      if (h.stateAfter && (!c || b <= f.frontier)) return b;
      h = aa(h.text, null, a.options.tabSize);
      if (null == e || d > h) (e = b - 1), (d = h);
    }
    return e;
  }
  function sb(a, b, c) {
    var d = a.doc,
      e = a.display;
    if (!d.mode.startState) return !0;
    var f = Cf(a, b, c),
      g = f > d.first && u(d, f - 1).stateAfter,
      g = g ? Sa(d.mode, g) : Df(d.mode);
    d.iter(f, b, function (c) {
      Zc(a, c.text, g);
      c.stateAfter =
        f == b - 1 || 0 == f % 5 || (f >= e.viewFrom && f < e.viewTo)
          ? Sa(d.mode, g)
          : null;
      ++f;
    });
    c && (d.frontier = f);
    return g;
  }
  function Ec(a) {
    return a.mover.offsetHeight - a.lineSpace.offsetHeight;
  }
  function ie(a) {
    if (a.cachedPaddingH) return a.cachedPaddingH;
    var b = U(a.measure, t('pre', 'x')),
      b = window.getComputedStyle ? window.getComputedStyle(b) : b.currentStyle,
      b = { left: parseInt(b.paddingLeft), right: parseInt(b.paddingRight) };
    isNaN(b.left) || isNaN(b.right) || (a.cachedPaddingH = b);
    return b;
  }
  function da(a) {
    return Hd - a.display.nativeBarWidth;
  }
  function pa(a) {
    return a.display.scroller.clientWidth - da(a) - a.display.barWidth;
  }
  function Nc(a) {
    return a.display.scroller.clientHeight - da(a) - a.display.barHeight;
  }
  function Zd(a, b, c) {
    if (a.line == b) return { map: a.measure.map, cache: a.measure.cache };
    for (var d = 0; d < a.rest.length; d++)
      if (a.rest[d] == b)
        return { map: a.measure.maps[d], cache: a.measure.caches[d] };
    for (d = 0; d < a.rest.length; d++)
      if (F(a.rest[d]) > c)
        return {
          map: a.measure.maps[d],
          cache: a.measure.caches[d],
          before: !0,
        };
  }
  function Vc(a, b) {
    if (b >= a.display.viewFrom && b < a.display.viewTo)
      return a.display.view[Ca(a, b)];
    var c = a.display.externalMeasured;
    if (c && b >= c.lineN && b < c.lineN + c.size) return c;
  }
  function Zb(a, b) {
    var c = F(b),
      d = Vc(a, c);
    d && !d.text ? (d = null) : d && d.changes && Od(a, d, c, Kc(a));
    if (!d) {
      var e;
      e = ia(b);
      d = F(e);
      e = a.display.externalMeasured = new ke(a.doc, e, d);
      e.lineN = d;
      d = e.built = Sd(a, e);
      e.text = d.pre;
      U(a.display.lineMeasure, d.pre);
      d = e;
    }
    c = Zd(d, b, c);
    return {
      line: b,
      view: d,
      rect: null,
      map: c.map,
      cache: c.cache,
      before: c.before,
      hasHeights: !1,
    };
  }
  function $c(a, b, c, d, e) {
    b.before && (c = -1);
    var f = c + (d || '');
    if (b.cache.hasOwnProperty(f)) a = b.cache[f];
    else {
      b.rect || (b.rect = b.view.text.getBoundingClientRect());
      if (!b.hasHeights) {
        var g = b.view,
          h = b.rect,
          k = a.options.lineWrapping,
          l = k && pa(a);
        if (!g.measure.heights || (k && g.measure.width != l)) {
          var m = (g.measure.heights = []);
          if (k)
            for (
              g.measure.width = l,
                g = g.text.firstChild.getClientRects(),
                k = 0;
              k < g.length - 1;
              k++
            ) {
              var l = g[k],
                p = g[k + 1];
              2 < Math.abs(l.bottom - p.bottom) &&
                m.push((l.bottom + p.top) / 2 - h.top);
            }
          m.push(h.bottom - h.top);
        }
        b.hasHeights = !0;
      }
      g = d;
      k = $d(b.map, c, g);
      d = k.node;
      h = k.start;
      l = k.end;
      c = k.collapse;
      var n;
      if (3 == d.nodeType) {
        for (m = 0; 4 > m; m++) {
          for (; h && tb(b.line.text.charAt(k.coverStart + h)); ) --h;
          for (
            ;
            k.coverStart + l < k.coverEnd &&
            tb(b.line.text.charAt(k.coverStart + l));

          )
            ++l;
          if (B && 9 > C && 0 == h && l == k.coverEnd - k.coverStart)
            n = d.parentNode.getBoundingClientRect();
          else if (B && a.options.lineWrapping) {
            var E = Ea(d, h, l).getClientRects();
            n = E.length ? E['right' == g ? E.length - 1 : 0] : ad;
          } else n = Ea(d, h, l).getBoundingClientRect() || ad;
          if (n.left || n.right || 0 == h) break;
          l = h;
          --h;
          c = 'right';
        }
        B &&
          11 > C &&
          ((E =
            !window.screen ||
            null == screen.logicalXDPI ||
            screen.logicalXDPI == screen.deviceXDPI) ||
            (null != bd
              ? (E = bd)
              : ((m = U(a.display.measure, t('span', 'x'))),
                (E = m.getBoundingClientRect()),
                (m = Ea(m, 0, 1).getBoundingClientRect()),
                (E = bd = 1 < Math.abs(E.left - m.left))),
            (E = !E)),
          E ||
            ((E = screen.logicalXDPI / screen.deviceXDPI),
            (m = screen.logicalYDPI / screen.deviceYDPI),
            (n = {
              left: n.left * E,
              right: n.right * E,
              top: n.top * m,
              bottom: n.bottom * m,
            })));
      } else
        0 < h && (c = g = 'right'),
          (n =
            a.options.lineWrapping && 1 < (E = d.getClientRects()).length
              ? E['right' == g ? E.length - 1 : 0]
              : d.getBoundingClientRect());
      !(B && 9 > C) ||
        h ||
        (n && (n.left || n.right)) ||
        (n = (n = d.parentNode.getClientRects()[0])
          ? {
              left: n.left,
              right: n.left + gb(a.display),
              top: n.top,
              bottom: n.bottom,
            }
          : ad);
      E = n.top - b.rect.top;
      d = n.bottom - b.rect.top;
      h = (E + d) / 2;
      g = b.view.measure.heights;
      for (m = 0; m < g.length - 1 && !(h < g[m]); m++);
      c = {
        left: ('right' == c ? n.right : n.left) - b.rect.left,
        right: ('left' == c ? n.left : n.right) - b.rect.left,
        top: m ? g[m - 1] : 0,
        bottom: g[m],
      };
      n.left || n.right || (c.bogus = !0);
      a.options.singleCursorHeightPerLine || ((c.rtop = E), (c.rbottom = d));
      a = c;
      a.bogus || (b.cache[f] = a);
    }
    return {
      left: a.left,
      right: a.right,
      top: e ? a.rtop : a.top,
      bottom: e ? a.rbottom : a.bottom,
    };
  }
  function $d(a, b, c) {
    for (var d, e, f, g, h = 0; h < a.length; h += 3) {
      var k = a[h],
        l = a[h + 1];
      if (b < k) (e = 0), (f = 1), (g = 'left');
      else if (b < l) (e = b - k), (f = e + 1);
      else if (h == a.length - 3 || (b == l && a[h + 3] > b))
        (f = l - k), (e = f - 1), b >= l && (g = 'right');
      if (null != e) {
        d = a[h + 2];
        k == l && c == (d.insertLeft ? 'left' : 'right') && (g = c);
        if ('left' == c && 0 == e)
          for (; h && a[h - 2] == a[h - 3] && a[h - 1].insertLeft; )
            (d = a[(h -= 3) + 2]), (g = 'left');
        if ('right' == c && e == l - k)
          for (
            ;
            h < a.length - 3 && a[h + 3] == a[h + 4] && !a[h + 5].insertLeft;

          )
            (d = a[(h += 3) + 2]), (g = 'right');
        break;
      }
    }
    return {
      node: d,
      start: e,
      end: f,
      collapse: g,
      coverStart: k,
      coverEnd: l,
    };
  }
  function le(a) {
    if (
      a.measure &&
      ((a.measure.cache = {}), (a.measure.heights = null), a.rest)
    )
      for (var b = 0; b < a.rest.length; b++) a.measure.caches[b] = {};
  }
  function me(a) {
    a.display.externalMeasure = null;
    za(a.display.lineMeasure);
    for (var b = 0; b < a.display.view.length; b++) le(a.display.view[b]);
  }
  function hb(a) {
    me(a);
    a.display.cachedCharWidth = a.display.cachedTextHeight = a.display.cachedPaddingH = null;
    a.options.lineWrapping || (a.display.maxLineChanged = !0);
    a.display.lineNumChars = null;
  }
  function cd(a, b, c, d) {
    if (b.widgets)
      for (var e = 0; e < b.widgets.length; ++e)
        if (b.widgets[e].above) {
          var f = ub(b.widgets[e]);
          c.top += f;
          c.bottom += f;
        }
    if ('line' == d) return c;
    d || (d = 'local');
    b = ea(b);
    b =
      'local' == d
        ? b + a.display.lineSpace.offsetTop
        : b - a.display.viewOffset;
    if ('page' == d || 'window' == d)
      (a = a.display.lineSpace.getBoundingClientRect()),
        (b +=
          a.top +
          ('window' == d
            ? 0
            : window.pageYOffset ||
              (document.documentElement || document.body).scrollTop)),
        (d =
          a.left +
          ('window' == d
            ? 0
            : window.pageXOffset ||
              (document.documentElement || document.body).scrollLeft)),
        (c.left += d),
        (c.right += d);
    c.top += b;
    c.bottom += b;
    return c;
  }
  function ne(a, b, c) {
    if ('div' == c) return b;
    var d = b.left;
    b = b.top;
    'page' == c
      ? ((d -=
          window.pageXOffset ||
          (document.documentElement || document.body).scrollLeft),
        (b -=
          window.pageYOffset ||
          (document.documentElement || document.body).scrollTop))
      : ('local' != c && c) ||
        ((c = a.display.sizer.getBoundingClientRect()),
        (d += c.left),
        (b += c.top));
    a = a.display.lineSpace.getBoundingClientRect();
    return { left: d - a.left, top: b - a.top };
  }
  function Yb(a, b, c, d, e) {
    d || (d = u(a.doc, b.line));
    var f = d;
    b = b.ch;
    d = $c(a, Zb(a, d), b, e);
    return cd(a, f, d, c);
  }
  function ma(a, b, c, d, e, f) {
    function g(b, g) {
      var h = $c(a, e, b, g ? 'right' : 'left', f);
      g ? (h.left = h.right) : (h.right = h.left);
      return cd(a, d, h, c);
    }
    function h(a, b) {
      var c = k[b],
        d = c.level % 2;
      a == dd(c) && b && c.level < k[b - 1].level
        ? ((c = k[--b]), (a = ed(c) - (c.level % 2 ? 0 : 1)), (d = !0))
        : a == ed(c) &&
          b < k.length - 1 &&
          c.level < k[b + 1].level &&
          ((c = k[++b]), (a = dd(c) - (c.level % 2)), (d = !1));
      return d && a == c.to && a > c.from ? g(a - 1) : g(a, d);
    }
    d = d || u(a.doc, b.line);
    e || (e = Zb(a, d));
    var k = Y(d);
    b = b.ch;
    if (!k) return g(b);
    var l = Sb(k, b),
      l = h(b, l);
    null != vb && (l.other = h(b, vb));
    return l;
  }
  function oe(a, b) {
    var c = 0;
    b = w(a.doc, b);
    a.options.lineWrapping || (c = gb(a.display) * b.ch);
    var d = u(a.doc, b.line),
      e = ea(d) + a.display.lineSpace.offsetTop;
    return { left: c, right: c, top: e, bottom: e + d.height };
  }
  function $b(a, b, c, d) {
    a = r(a, b);
    a.xRel = d;
    c && (a.outside = !0);
    return a;
  }
  function fd(a, b, c) {
    var d = a.doc;
    c += a.display.viewOffset;
    if (0 > c) return $b(d.first, 0, !0, -1);
    var e = Ba(d, c),
      f = d.first + d.size - 1;
    if (e > f) return $b(d.first + d.size - 1, u(d, f).text.length, !0, 1);
    0 > b && (b = 0);
    for (d = u(d, e); ; )
      if (
        ((e = Ef(a, d, e, b, c)),
        (f = (d = Aa(d, !1)) && d.find(0, !0)),
        d && (e.ch > f.from.ch || (e.ch == f.from.ch && 0 < e.xRel)))
      )
        e = F((d = f.to.line));
      else return e;
  }
  function Ef(a, b, c, d, e) {
    function f(d) {
      d = ma(a, r(c, d), 'line', b, l);
      h = !0;
      if (g > d.bottom) return d.left - k;
      if (g < d.top) return d.left + k;
      h = !1;
      return d.left;
    }
    var g = e - ea(b),
      h = !1,
      k = 2 * a.display.wrapper.clientWidth,
      l = Zb(a, b),
      m = Y(b),
      p = b.text.length;
    e = ac(b);
    var n = bc(b),
      E = f(e),
      q = h,
      t = f(n),
      u = h;
    if (d > t) return $b(c, n, u, 1);
    for (;;) {
      if (m ? n == e || n == gd(b, e, 1) : 1 >= n - e) {
        m = d < E || d - E <= t - d ? e : n;
        for (d -= m == e ? E : t; tb(b.text.charAt(m)); ) ++m;
        return $b(c, m, m == e ? q : u, -1 > d ? -1 : 1 < d ? 1 : 0);
      }
      var v = Math.ceil(p / 2),
        w = e + v;
      if (m) for (var w = e, x = 0; x < v; ++x) w = gd(b, w, 1);
      x = f(w);
      if (x > d) {
        n = w;
        t = x;
        if ((u = h)) t += 1e3;
        p = v;
      } else (e = w), (E = x), (q = h), (p -= v);
    }
  }
  function xa(a) {
    if (null != a.cachedTextHeight) return a.cachedTextHeight;
    if (null == Fa) {
      Fa = t('pre');
      for (var b = 0; 49 > b; ++b)
        Fa.appendChild(document.createTextNode('x')), Fa.appendChild(t('br'));
      Fa.appendChild(document.createTextNode('x'));
    }
    U(a.measure, Fa);
    b = Fa.offsetHeight / 50;
    3 < b && (a.cachedTextHeight = b);
    za(a.measure);
    return b || 1;
  }
  function gb(a) {
    if (null != a.cachedCharWidth) return a.cachedCharWidth;
    var b = t('span', 'xxxxxxxxxx'),
      c = t('pre', [b]);
    U(a.measure, c);
    b = b.getBoundingClientRect();
    b = (b.right - b.left) / 10;
    2 < b && (a.cachedCharWidth = b);
    return b || 10;
  }
  function Ja(a) {
    a.curOp = {
      cm: a,
      viewChanged: !1,
      startHeight: a.doc.height,
      forceUpdate: !1,
      updateInput: null,
      typing: !1,
      changeObjs: null,
      cursorActivityHandlers: null,
      cursorActivityCalled: 0,
      selectionChanged: !1,
      updateMaxLine: !1,
      scrollLeft: null,
      scrollTop: null,
      scrollToPos: null,
      focus: !1,
      id: ++Ff,
    };
    Ta
      ? Ta.ops.push(a.curOp)
      : (a.curOp.ownsGroup = Ta = { ops: [a.curOp], delayedCallbacks: [] });
  }
  function La(a) {
    if ((a = a.curOp.ownsGroup))
      try {
        var b = a.delayedCallbacks,
          c = 0;
        do {
          for (; c < b.length; c++) b[c]();
          for (var d = 0; d < a.ops.length; d++) {
            var e = a.ops[d];
            if (e.cursorActivityHandlers)
              for (; e.cursorActivityCalled < e.cursorActivityHandlers.length; )
                e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm);
          }
        } while (c < b.length);
      } finally {
        Ta = null;
        for (b = 0; b < a.ops.length; b++) a.ops[b].cm.curOp = null;
        a = a.ops;
        for (b = 0; b < a.length; b++) {
          var e = a[b],
            c = e.cm,
            f = (d = c.display);
          !f.scrollbarsClipped &&
            f.scroller.offsetWidth &&
            ((f.nativeBarWidth =
              f.scroller.offsetWidth - f.scroller.clientWidth),
            (f.heightForcer.style.height = da(c) + 'px'),
            (f.sizer.style.marginBottom = -f.nativeBarWidth + 'px'),
            (f.sizer.style.borderRightWidth = da(c) + 'px'),
            (f.scrollbarsClipped = !0));
          e.updateMaxLine && Dc(c);
          e.mustUpdate =
            e.viewChanged ||
            e.forceUpdate ||
            null != e.scrollTop ||
            (e.scrollToPos &&
              (e.scrollToPos.from.line < d.viewFrom ||
                e.scrollToPos.to.line >= d.viewTo)) ||
            (d.maxLineChanged && c.options.lineWrapping);
          e.update =
            e.mustUpdate &&
            new Mb(
              c,
              e.mustUpdate && { top: e.scrollTop, ensure: e.scrollToPos },
              e.forceUpdate
            );
        }
        for (b = 0; b < a.length; b++)
          (e = a[b]), (e.updatedDisplay = e.mustUpdate && Lc(e.cm, e.update));
        for (b = 0; b < a.length; b++)
          if (
            ((e = a[b]),
            (c = e.cm),
            (d = c.display),
            e.updatedDisplay && Lb(c),
            (e.barMeasure = jb(c)),
            d.maxLineChanged &&
              !c.options.lineWrapping &&
              ((f = void 0),
              (f = d.maxLine.text.length),
              (f = $c(c, Zb(c, d.maxLine), f, void 0)),
              (e.adjustWidthTo = f.left + 3),
              (c.display.sizerWidth = e.adjustWidthTo),
              (e.barMeasure.scrollWidth = Math.max(
                d.scroller.clientWidth,
                d.sizer.offsetLeft +
                  e.adjustWidthTo +
                  da(c) +
                  c.display.barWidth
              )),
              (e.maxScrollLeft = Math.max(
                0,
                d.sizer.offsetLeft + e.adjustWidthTo - pa(c)
              ))),
            e.updatedDisplay || e.selectionChanged)
          )
            e.preparedSelection = d.input.prepareSelection();
        for (b = 0; b < a.length; b++)
          (e = a[b]),
            (c = e.cm),
            null != e.adjustWidthTo &&
              ((c.display.sizer.style.minWidth = e.adjustWidthTo + 'px'),
              e.maxScrollLeft < c.doc.scrollLeft &&
                Ma(
                  c,
                  Math.min(c.display.scroller.scrollLeft, e.maxScrollLeft),
                  !0
                ),
              (c.display.maxLineChanged = !1)),
            e.preparedSelection &&
              c.display.input.showSelection(e.preparedSelection),
            e.updatedDisplay && Oc(c, e.barMeasure),
            (e.updatedDisplay || e.startHeight != c.doc.height) &&
              Na(c, e.barMeasure),
            e.selectionChanged && Yc(c),
            c.state.focused && e.updateInput && c.display.input.reset(e.typing),
            e.focus && e.focus == fa() && Ud(e.cm);
        for (b = 0; b < a.length; b++) {
          e = a[b];
          c = e.cm;
          d = c.display;
          f = c.doc;
          e.updatedDisplay && Md(c, e.update);
          null == d.wheelStartX ||
            (null == e.scrollTop && null == e.scrollLeft && !e.scrollToPos) ||
            (d.wheelStartX = d.wheelStartY = null);
          null == e.scrollTop ||
            (d.scroller.scrollTop == e.scrollTop && !e.forceScroll) ||
            ((f.scrollTop = Math.max(
              0,
              Math.min(
                d.scroller.scrollHeight - d.scroller.clientHeight,
                e.scrollTop
              )
            )),
            d.scrollbars.setScrollTop(f.scrollTop),
            (d.scroller.scrollTop = f.scrollTop));
          null == e.scrollLeft ||
            (d.scroller.scrollLeft == e.scrollLeft && !e.forceScroll) ||
            ((f.scrollLeft = Math.max(
              0,
              Math.min(d.scroller.scrollWidth - pa(c), e.scrollLeft)
            )),
            d.scrollbars.setScrollLeft(f.scrollLeft),
            (d.scroller.scrollLeft = f.scrollLeft),
            Bc(c));
          if (e.scrollToPos) {
            var g = void 0,
              h = w(f, e.scrollToPos.from),
              g = w(f, e.scrollToPos.to),
              k = e.scrollToPos.margin;
            null == k && (k = 0);
            for (var l = 0; 5 > l; l++) {
              var m = !1,
                p = ma(c, h),
                n = g && g != h ? ma(c, g) : p,
                n = cc(
                  c,
                  Math.min(p.left, n.left),
                  Math.min(p.top, n.top) - k,
                  Math.max(p.left, n.left),
                  Math.max(p.bottom, n.bottom) + k
                ),
                q = c.doc.scrollTop,
                r = c.doc.scrollLeft;
              null != n.scrollTop &&
                (lb(c, n.scrollTop),
                1 < Math.abs(c.doc.scrollTop - q) && (m = !0));
              null != n.scrollLeft &&
                (Ma(c, n.scrollLeft),
                1 < Math.abs(c.doc.scrollLeft - r) && (m = !0));
              if (!m) break;
            }
            g = p;
            e.scrollToPos.isCursor &&
              c.state.focused &&
              (ja(c, 'scrollCursorIntoView') ||
                ((k = c.display),
                (l = k.sizer.getBoundingClientRect()),
                (h = null),
                0 > g.top + l.top
                  ? (h = !0)
                  : g.bottom + l.top >
                      (window.innerHeight ||
                        document.documentElement.clientHeight) && (h = !1),
                null == h ||
                  Gf ||
                  ((g = t(
                    'div',
                    '​',
                    null,
                    'position: absolute; top: ' +
                      (g.top - k.viewOffset - c.display.lineSpace.offsetTop) +
                      'px; height: ' +
                      (g.bottom - g.top + da(c) + k.barHeight) +
                      'px; left: ' +
                      g.left +
                      'px; width: 2px;'
                  )),
                  c.display.lineSpace.appendChild(g),
                  g.scrollIntoView(h),
                  c.display.lineSpace.removeChild(g))));
          }
          h = e.maybeHiddenMarkers;
          g = e.maybeUnhiddenMarkers;
          if (h)
            for (k = 0; k < h.length; ++k) h[k].lines.length || K(h[k], 'hide');
          if (g)
            for (k = 0; k < g.length; ++k)
              g[k].lines.length && K(g[k], 'unhide');
          d.wrapper.offsetHeight &&
            (f.scrollTop = c.display.scroller.scrollTop);
          e.changeObjs && K(c, 'changes', c, e.changeObjs);
          e.update && e.update.finish();
        }
      }
  }
  function T(a, b) {
    if (a.curOp) return b();
    Ja(a);
    try {
      return b();
    } finally {
      La(a);
    }
  }
  function G(a, b) {
    return function () {
      if (a.curOp) return b.apply(a, arguments);
      Ja(a);
      try {
        return b.apply(a, arguments);
      } finally {
        La(a);
      }
    };
  }
  function M(a) {
    return function () {
      if (this.curOp) return a.apply(this, arguments);
      Ja(this);
      try {
        return a.apply(this, arguments);
      } finally {
        La(this);
      }
    };
  }
  function N(a) {
    return function () {
      var b = this.cm;
      if (!b || b.curOp) return a.apply(this, arguments);
      Ja(b);
      try {
        return a.apply(this, arguments);
      } finally {
        La(b);
      }
    };
  }
  function ke(a, b, c) {
    for (var d = (this.line = b), e; (d = Aa(d, !1)); )
      (d = d.find(1, !0).line), (e || (e = [])).push(d);
    this.size = (this.rest = e) ? F(A(this.rest)) - c + 1 : 1;
    this.node = this.text = null;
    this.hidden = ya(a, b);
  }
  function Nb(a, b, c) {
    var d = [],
      e;
    for (e = b; e < c; )
      (b = new ke(a.doc, u(a.doc, e), e)), (e += b.size), d.push(b);
    return d;
  }
  function Q(a, b, c, d) {
    null == b && (b = a.doc.first);
    null == c && (c = a.doc.first + a.doc.size);
    d || (d = 0);
    var e = a.display;
    d &&
      c < e.viewTo &&
      (null == e.updateLineNumbers || e.updateLineNumbers > b) &&
      (e.updateLineNumbers = b);
    a.curOp.viewChanged = !0;
    if (b >= e.viewTo) ra && Mc(a.doc, b) < e.viewTo && qa(a);
    else if (c <= e.viewFrom)
      ra && Ld(a.doc, c + d) > e.viewFrom
        ? qa(a)
        : ((e.viewFrom += d), (e.viewTo += d));
    else if (b <= e.viewFrom && c >= e.viewTo) qa(a);
    else if (b <= e.viewFrom) {
      var f = dc(a, c, c + d, 1);
      f
        ? ((e.view = e.view.slice(f.index)),
          (e.viewFrom = f.lineN),
          (e.viewTo += d))
        : qa(a);
    } else if (c >= e.viewTo)
      (f = dc(a, b, b, -1))
        ? ((e.view = e.view.slice(0, f.index)), (e.viewTo = f.lineN))
        : qa(a);
    else {
      var f = dc(a, b, b, -1),
        g = dc(a, c, c + d, 1);
      f && g
        ? ((e.view = e.view
            .slice(0, f.index)
            .concat(Nb(a, f.lineN, g.lineN))
            .concat(e.view.slice(g.index))),
          (e.viewTo += d))
        : qa(a);
    }
    if ((a = e.externalMeasured))
      c < a.lineN
        ? (a.lineN += d)
        : b < a.lineN + a.size && (e.externalMeasured = null);
  }
  function na(a, b, c) {
    a.curOp.viewChanged = !0;
    var d = a.display,
      e = a.display.externalMeasured;
    e && b >= e.lineN && b < e.lineN + e.size && (d.externalMeasured = null);
    b < d.viewFrom ||
      b >= d.viewTo ||
      ((a = d.view[Ca(a, b)]),
      null != a.node &&
        ((a = a.changes || (a.changes = [])), -1 == D(a, c) && a.push(c)));
  }
  function qa(a) {
    a.display.viewFrom = a.display.viewTo = a.doc.first;
    a.display.view = [];
    a.display.viewOffset = 0;
  }
  function Ca(a, b) {
    if (b >= a.display.viewTo) return null;
    b -= a.display.viewFrom;
    if (0 > b) return null;
    for (var c = a.display.view, d = 0; d < c.length; d++)
      if (((b -= c[d].size), 0 > b)) return d;
  }
  function dc(a, b, c, d) {
    var e = Ca(a, b),
      f = a.display.view;
    if (!ra || c == a.doc.first + a.doc.size) return { index: e, lineN: c };
    for (var g = 0, h = a.display.viewFrom; g < e; g++) h += f[g].size;
    if (h != b) {
      if (0 < d) {
        if (e == f.length - 1) return null;
        b = h + f[e].size - b;
        e++;
      } else b = h - b;
      c += b;
    }
    for (; Mc(a.doc, c) != c; ) {
      if (e == (0 > d ? 0 : f.length - 1)) return null;
      c += d * f[e - (0 > d ? 1 : 0)].size;
      e += d;
    }
    return { index: e, lineN: c };
  }
  function Kd(a) {
    a = a.display.view;
    for (var b = 0, c = 0; c < a.length; c++) {
      var d = a[c];
      d.hidden || (d.node && !d.changes) || ++b;
    }
    return b;
  }
  function sf(a) {
    function b() {
      d.activeTouch &&
        ((e = setTimeout(function () {
          d.activeTouch = null;
        }, 1e3)),
        (f = d.activeTouch),
        (f.end = +new Date()));
    }
    function c(a, b) {
      if (null == b.left) return !0;
      var c = b.left - a.left,
        d = b.top - a.top;
      return 400 < c * c + d * d;
    }
    var d = a.display;
    v(d.scroller, 'mousedown', G(a, pe));
    B && 11 > C
      ? v(
          d.scroller,
          'dblclick',
          G(a, function (b) {
            if (!ja(a, b)) {
              var c = Ua(a, b);
              !c ||
                hd(a, b, 'gutterClick', !0, L) ||
                oa(a.display, b) ||
                (O(b), (b = a.findWordAt(c)), Ub(a.doc, b.anchor, b.head));
            }
          })
        )
      : v(d.scroller, 'dblclick', function (b) {
          ja(a, b) || O(b);
        });
    id ||
      v(d.scroller, 'contextmenu', function (b) {
        qe(a, b);
      });
    var e,
      f = { end: 0 };
    v(d.scroller, 'touchstart', function (a) {
      var b;
      1 != a.touches.length
        ? (b = !1)
        : ((b = a.touches[0]), (b = 1 >= b.radiusX && 1 >= b.radiusY));
      b ||
        (clearTimeout(e),
        (b = +new Date()),
        (d.activeTouch = {
          start: b,
          moved: !1,
          prev: 300 >= b - f.end ? f : null,
        }),
        1 == a.touches.length &&
          ((d.activeTouch.left = a.touches[0].pageX),
          (d.activeTouch.top = a.touches[0].pageY)));
    });
    v(d.scroller, 'touchmove', function () {
      d.activeTouch && (d.activeTouch.moved = !0);
    });
    v(d.scroller, 'touchend', function (e) {
      var f = d.activeTouch;
      if (
        f &&
        !oa(d, e) &&
        null != f.left &&
        !f.moved &&
        300 > new Date() - f.start
      ) {
        var g = a.coordsChar(d.activeTouch, 'page'),
          f =
            !f.prev || c(f, f.prev)
              ? new z(g, g)
              : !f.prev.prev || c(f, f.prev.prev)
              ? a.findWordAt(g)
              : new z(r(g.line, 0), w(a.doc, r(g.line + 1, 0)));
        a.setSelection(f.anchor, f.head);
        a.focus();
        O(e);
      }
      b();
    });
    v(d.scroller, 'touchcancel', b);
    v(d.scroller, 'scroll', function () {
      d.scroller.clientHeight &&
        (lb(a, d.scroller.scrollTop),
        Ma(a, d.scroller.scrollLeft, !0),
        K(a, 'scroll', a));
    });
    v(d.scroller, 'mousewheel', function (b) {
      re(a, b);
    });
    v(d.scroller, 'DOMMouseScroll', function (b) {
      re(a, b);
    });
    v(d.wrapper, 'scroll', function () {
      d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;
    });
    d.dragFunctions = {
      simple: function (b) {
        ja(a, b) || jd(b);
      },
      start: function (b) {
        if (B && (!a.state.draggingText || 100 > +new Date() - se)) jd(b);
        else if (
          !ja(a, b) &&
          !oa(a.display, b) &&
          (b.dataTransfer.setData('Text', a.getSelection()),
          b.dataTransfer.setDragImage && !te)
        ) {
          var c = t('img', null, null, 'position: fixed; left: 0; top: 0;');
          c.src =
            '\x3d\x3d';
          ba &&
            ((c.width = c.height = 1),
            a.display.wrapper.appendChild(c),
            (c._top = c.offsetTop));
          b.dataTransfer.setDragImage(c, 0, 0);
          ba && c.parentNode.removeChild(c);
        }
      },
      drop: G(a, Hf),
    };
    var g = d.input.getField();
    v(g, 'keyup', function (b) {
      ue.call(a, b);
    });
    v(g, 'keydown', G(a, ve));
    v(g, 'keypress', G(a, we));
    v(g, 'focus', cb(xc, a));
    v(g, 'blur', cb(db, a));
  }
  function If(a) {
    var b = a.display;
    if (
      b.lastWrapHeight != b.wrapper.clientHeight ||
      b.lastWrapWidth != b.wrapper.clientWidth
    )
      (b.cachedCharWidth = b.cachedTextHeight = b.cachedPaddingH = null),
        (b.scrollbarsClipped = !1),
        a.setSize();
  }
  function oa(a, b) {
    for (var c = b.target || b.srcElement; c != a.wrapper; c = c.parentNode)
      if (
        !c ||
        (1 == c.nodeType && 'true' == c.getAttribute('cm-ignore-events')) ||
        (c.parentNode == a.sizer && c != a.mover)
      )
        return !0;
  }
  function Ua(a, b, c, d) {
    var e = a.display;
    if (
      !c &&
      'true' == (b.target || b.srcElement).getAttribute('cm-not-content')
    )
      return null;
    var f, g;
    c = e.lineSpace.getBoundingClientRect();
    try {
      (f = b.clientX - c.left), (g = b.clientY - c.top);
    } catch (h) {
      return null;
    }
    b = fd(a, f, g);
    var k;
    d &&
      1 == b.xRel &&
      (k = u(a.doc, b.line).text).length == b.ch &&
      ((d = aa(k, k.length, a.options.tabSize) - k.length),
      (b = r(
        b.line,
        Math.max(0, Math.round((f - ie(a.display).left) / gb(a.display)) - d)
      )));
    return b;
  }
  function pe(a) {
    var b = this.display;
    if (!((b.activeTouch && b.input.supportsTouch()) || ja(this, a)))
      if (((b.shift = a.shiftKey), oa(b, a)))
        J ||
          ((b.scroller.draggable = !1),
          setTimeout(function () {
            b.scroller.draggable = !0;
          }, 100));
      else if (!hd(this, a, 'gutterClick', !0, L)) {
        var c = Ua(this, a);
        window.focus();
        switch (xe(a)) {
          case 1:
            c
              ? Jf(this, a, c)
              : (a.target || a.srcElement) == b.scroller && O(a);
            break;
          case 2:
            J && (this.state.lastMiddleDown = +new Date());
            c && Ub(this.doc, c);
            setTimeout(function () {
              b.input.focus();
            }, 20);
            O(a);
            break;
          case 3:
            id ? qe(this, a) : Kf(this);
        }
      }
  }
  function Jf(a, b, c) {
    B ? setTimeout(cb(Ud, a), 0) : (a.curOp.focus = fa());
    var d = +new Date(),
      e;
    ec && ec.time > d - 400 && 0 == y(ec.pos, c)
      ? (e = 'triple')
      : fc && fc.time > d - 400 && 0 == y(fc.pos, c)
      ? ((e = 'double'), (ec = { time: d, pos: c }))
      : ((e = 'single'), (fc = { time: d, pos: c }));
    var d = a.doc.sel,
      f = W ? b.metaKey : b.ctrlKey,
      g;
    a.options.dragDrop &&
    Lf &&
    !Rb(a) &&
    'single' == e &&
    -1 < (g = d.contains(c)) &&
    !d.ranges[g].empty()
      ? Mf(a, b, c, f)
      : Nf(a, b, c, e, f);
  }
  function Mf(a, b, c, d) {
    var e = a.display,
      f = +new Date(),
      g = G(a, function (h) {
        J && (e.scroller.draggable = !1);
        a.state.draggingText = !1;
        ka(document, 'mouseup', g);
        ka(e.scroller, 'drop', g);
        10 >
          Math.abs(b.clientX - h.clientX) + Math.abs(b.clientY - h.clientY) &&
          (O(h),
          !d && +new Date() - 200 < f && Ub(a.doc, c),
          J || (B && 9 == C)
            ? setTimeout(function () {
                document.body.focus();
                e.input.focus();
              }, 20)
            : e.input.focus());
      });
    J && (e.scroller.draggable = !0);
    a.state.draggingText = g;
    e.scroller.dragDrop && e.scroller.dragDrop();
    v(document, 'mouseup', g);
    v(e.scroller, 'drop', g);
  }
  function Nf(a, b, c, d, e) {
    function f(b) {
      if (0 != y(x, b))
        if (((x = b), 'rect' == d)) {
          for (
            var e = [],
              f = a.options.tabSize,
              g = aa(u(l, c.line).text, c.ch, f),
              h = aa(u(l, b.line).text, b.ch, f),
              k = Math.min(g, h),
              g = Math.max(g, h),
              h = Math.min(c.line, b.line),
              q = Math.min(a.lastLine(), Math.max(c.line, b.line));
            h <= q;
            h++
          ) {
            var E = u(l, h).text,
              t = ye(E, k, f);
            k == g
              ? e.push(new z(r(h, t), r(h, t)))
              : E.length > t && e.push(new z(r(h, t), r(h, ye(E, g, f))));
          }
          e.length || e.push(new z(c, c));
          H(l, Z(n.ranges.slice(0, p).concat(e), p), {
            origin: '*mouse',
            scroll: !1,
          });
          a.scrollIntoView(b);
        } else
          (e = m),
            (f = e.anchor),
            (k = b),
            'single' != d &&
              ((b =
                'double' == d
                  ? a.findWordAt(b)
                  : new z(r(b.line, 0), w(l, r(b.line + 1, 0)))),
              0 < y(b.anchor, f)
                ? ((k = b.head), (f = Qb(e.from(), b.anchor)))
                : ((k = b.anchor), (f = Pb(e.to(), b.head)))),
            (e = n.ranges.slice(0)),
            (e[p] = new z(w(l, f), k)),
            H(l, Z(e, p), kd);
    }
    function g(b) {
      var c = ++A,
        e = Ua(a, b, !0, 'rect' == d);
      if (e)
        if (0 != y(e, x)) {
          a.curOp.focus = fa();
          f(e);
          var h = Hc(k, l);
          (e.line >= h.to || e.line < h.from) &&
            setTimeout(
              G(a, function () {
                A == c && g(b);
              }),
              150
            );
        } else {
          var m = b.clientY < B.top ? -20 : b.clientY > B.bottom ? 20 : 0;
          m &&
            setTimeout(
              G(a, function () {
                A == c && ((k.scroller.scrollTop += m), g(b));
              }),
              50
            );
        }
    }
    function h(a) {
      A = Infinity;
      O(a);
      k.input.focus();
      ka(document, 'mousemove', F);
      ka(document, 'mouseup', C);
      l.history.lastSelOrigin = null;
    }
    var k = a.display,
      l = a.doc;
    O(b);
    var m,
      p,
      n = l.sel,
      q = n.ranges;
    e && !b.shiftKey
      ? ((p = l.sel.contains(c)), (m = -1 < p ? q[p] : new z(c, c)))
      : ((m = l.sel.primary()), (p = l.sel.primIndex));
    if (b.altKey)
      (d = 'rect'), e || (m = new z(c, c)), (c = Ua(a, b, !0, !0)), (p = -1);
    else if ('double' == d) {
      var t = a.findWordAt(c);
      m = a.display.shift || l.extend ? rb(l, m, t.anchor, t.head) : t;
    } else
      'triple' == d
        ? ((t = new z(r(c.line, 0), w(l, r(c.line + 1, 0)))),
          (m = a.display.shift || l.extend ? rb(l, m, t.anchor, t.head) : t))
        : (m = rb(l, m, c));
    e
      ? -1 == p
        ? ((p = q.length),
          H(l, Z(q.concat([m]), p), { scroll: !1, origin: '*mouse' }))
        : 1 < q.length && q[p].empty() && 'single' == d && !b.shiftKey
        ? (H(l, Z(q.slice(0, p).concat(q.slice(p + 1)), 0)), (n = l.sel))
        : Xc(l, p, m, kd)
      : ((p = 0), H(l, new la([m], 0), kd), (n = l.sel));
    var x = c,
      B = k.wrapper.getBoundingClientRect(),
      A = 0,
      F = G(a, function (a) {
        xe(a) ? g(a) : h(a);
      }),
      C = G(a, h);
    v(document, 'mousemove', F);
    v(document, 'mouseup', C);
  }
  function hd(a, b, c, d, e) {
    try {
      var f = b.clientX,
        g = b.clientY;
    } catch (h) {
      return !1;
    }
    if (f >= Math.floor(a.display.gutters.getBoundingClientRect().right))
      return !1;
    d && O(b);
    d = a.display;
    var k = d.lineDiv.getBoundingClientRect();
    if (g > k.bottom || !S(a, c)) return ld(b);
    g -= k.top - d.viewOffset;
    for (k = 0; k < a.options.gutters.length; ++k) {
      var l = d.gutters.childNodes[k];
      if (l && l.getBoundingClientRect().right >= f)
        return (
          (f = Ba(a.doc, g)), e(a, c, a, f, a.options.gutters[k], b), ld(b)
        );
    }
  }
  function Hf(a) {
    var b = this;
    if (!ja(b, a) && !oa(b.display, a)) {
      O(a);
      B && (se = +new Date());
      var c = Ua(b, a, !0),
        d = a.dataTransfer.files;
      if (c && !Rb(b))
        if (d && d.length && window.FileReader && window.File) {
          var e = d.length,
            f = Array(e),
            g = 0;
          a = function (a, d) {
            var h = new FileReader();
            h.onload = G(b, function () {
              f[d] = h.result;
              if (++g == e) {
                c = w(b.doc, c);
                var a = {
                  from: c,
                  to: c,
                  text: sa(f.join('\n')),
                  origin: 'paste',
                };
                Oa(b.doc, a);
                be(b.doc, ga(c, ta(a)));
              }
            });
            h.readAsText(a);
          };
          for (var h = 0; h < e; ++h) a(d[h], h);
        } else if (b.state.draggingText && -1 < b.doc.sel.contains(c))
          b.state.draggingText(a),
            setTimeout(function () {
              b.display.input.focus();
            }, 20);
        else
          try {
            if ((f = a.dataTransfer.getData('Text'))) {
              if (b.state.draggingText && (W ? !a.altKey : !a.ctrlKey))
                var k = b.listSelections();
              Vb(b.doc, ga(c, c));
              if (k)
                for (h = 0; h < k.length; ++h)
                  wb(b.doc, '', k[h].anchor, k[h].head, 'drag');
              b.replaceSelection(f, 'around', 'paste');
              b.display.input.focus();
            }
          } catch (l) {}
    }
  }
  function lb(a, b) {
    2 > Math.abs(a.doc.scrollTop - b) ||
      ((a.doc.scrollTop = b),
      wa || Pc(a, { top: b }),
      a.display.scroller.scrollTop != b && (a.display.scroller.scrollTop = b),
      a.display.scrollbars.setScrollTop(b),
      wa && Pc(a),
      fb(a, 100));
  }
  function Ma(a, b, c) {
    (c ? b == a.doc.scrollLeft : 2 > Math.abs(a.doc.scrollLeft - b)) ||
      ((b = Math.min(
        b,
        a.display.scroller.scrollWidth - a.display.scroller.clientWidth
      )),
      (a.doc.scrollLeft = b),
      Bc(a),
      a.display.scroller.scrollLeft != b && (a.display.scroller.scrollLeft = b),
      a.display.scrollbars.setScrollLeft(b));
  }
  function re(a, b) {
    var c = ze(b),
      d = c.x,
      c = c.y,
      e = a.display,
      f = e.scroller;
    if (
      (d && f.scrollWidth > f.clientWidth) ||
      (c && f.scrollHeight > f.clientHeight)
    ) {
      if (c && W && J) {
        var g = b.target,
          h = e.view;
        a: for (; g != f; g = g.parentNode)
          for (var k = 0; k < h.length; k++)
            if (h[k].node == g) {
              a.display.currentWheelTarget = g;
              break a;
            }
      }
      !d || wa || ba || null == R
        ? (c &&
            null != R &&
            ((g = c * R),
            (h = a.doc.scrollTop),
            (k = h + e.wrapper.clientHeight),
            0 > g
              ? (h = Math.max(0, h + g - 50))
              : (k = Math.min(a.doc.height, k + g + 50)),
            Pc(a, { top: h, bottom: k })),
          20 > gc &&
            (null == e.wheelStartX
              ? ((e.wheelStartX = f.scrollLeft),
                (e.wheelStartY = f.scrollTop),
                (e.wheelDX = d),
                (e.wheelDY = c),
                setTimeout(function () {
                  if (null != e.wheelStartX) {
                    var a = f.scrollLeft - e.wheelStartX,
                      b = f.scrollTop - e.wheelStartY,
                      a =
                        (b && e.wheelDY && b / e.wheelDY) ||
                        (a && e.wheelDX && a / e.wheelDX);
                    e.wheelStartX = e.wheelStartY = null;
                    a && ((R = (R * gc + a) / (gc + 1)), ++gc);
                  }
                }, 200))
              : ((e.wheelDX += d), (e.wheelDY += c))))
        : (c &&
            lb(
              a,
              Math.max(
                0,
                Math.min(f.scrollTop + c * R, f.scrollHeight - f.clientHeight)
              )
            ),
          Ma(
            a,
            Math.max(
              0,
              Math.min(f.scrollLeft + d * R, f.scrollWidth - f.clientWidth)
            )
          ),
          O(b),
          (e.wheelStartX = null));
    }
  }
  function hc(a, b, c) {
    if ('string' == typeof b && ((b = ic[b]), !b)) return !1;
    a.display.input.ensurePolled();
    var d = a.display.shift,
      e = !1;
    try {
      Rb(a) && (a.state.suppressEdits = !0),
        c && (a.display.shift = !1),
        (e = b(a) != Ae);
    } finally {
      (a.display.shift = d), (a.state.suppressEdits = !1);
    }
    return e;
  }
  function Of(a, b, c) {
    for (var d = 0; d < a.state.keyMaps.length; d++) {
      var e = xb(b, a.state.keyMaps[d], c, a);
      if (e) return e;
    }
    return (
      (a.options.extraKeys && xb(b, a.options.extraKeys, c, a)) ||
      xb(b, a.options.keyMap, c, a)
    );
  }
  function jc(a, b, c, d) {
    var e = a.state.keySeq;
    if (e) {
      if (Pf(b)) return 'handled';
      Qf.set(50, function () {
        a.state.keySeq == e &&
          ((a.state.keySeq = null), a.display.input.reset());
      });
      b = e + ' ' + b;
    }
    d = Of(a, b, d);
    'multi' == d && (a.state.keySeq = b);
    'handled' == d && L(a, 'keyHandled', a, b, c);
    if ('handled' == d || 'multi' == d) O(c), Yc(a);
    return e && !d && /\'$/.test(b) ? (O(c), !0) : !!d;
  }
  function Be(a, b) {
    var c = Rf(b, !0);
    return c
      ? b.shiftKey && !a.state.keySeq
        ? jc(a, 'Shift-' + c, b, function (b) {
            return hc(a, b, !0);
          }) ||
          jc(a, c, b, function (b) {
            if ('string' == typeof b ? /^go[A-Z]/.test(b) : b.motion)
              return hc(a, b);
          })
        : jc(a, c, b, function (b) {
            return hc(a, b);
          })
      : !1;
  }
  function Sf(a, b, c) {
    return jc(a, "'" + c + "'", b, function (b) {
      return hc(a, b, !0);
    });
  }
  function ve(a) {
    this.curOp.focus = fa();
    if (!ja(this, a)) {
      B && 11 > C && 27 == a.keyCode && (a.returnValue = !1);
      var b = a.keyCode;
      this.display.shift = 16 == b || a.shiftKey;
      var c = Be(this, a);
      ba &&
        ((md = c ? b : null),
        !c &&
          88 == b &&
          !Ce &&
          (W ? a.metaKey : a.ctrlKey) &&
          this.replaceSelection('', null, 'cut'));
      18 != b ||
        /\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className) ||
        Tf(this);
    }
  }
  function Tf(a) {
    function b(a) {
      (18 != a.keyCode && a.altKey) ||
        (kb(c, 'CodeMirror-crosshair'),
        ka(document, 'keyup', b),
        ka(document, 'mouseover', b));
    }
    var c = a.display.lineDiv;
    mb(c, 'CodeMirror-crosshair');
    v(document, 'keyup', b);
    v(document, 'mouseover', b);
  }
  function ue(a) {
    16 == a.keyCode && (this.doc.sel.shift = !1);
    ja(this, a);
  }
  function we(a) {
    if (
      !(
        oa(this.display, a) ||
        ja(this, a) ||
        (a.ctrlKey && !a.altKey) ||
        (W && a.metaKey)
      )
    ) {
      var b = a.keyCode,
        c = a.charCode;
      if (ba && b == md) (md = null), O(a);
      else if (!ba || (a.which && !(10 > a.which)) || !Be(this, a))
        if (((b = String.fromCharCode(null == c ? b : c)), !Sf(this, a, b)))
          this.display.input.onKeyPress(a);
    }
  }
  function Kf(a) {
    a.state.delayingBlurEvent = !0;
    setTimeout(function () {
      a.state.delayingBlurEvent && ((a.state.delayingBlurEvent = !1), db(a));
    }, 100);
  }
  function xc(a) {
    a.state.delayingBlurEvent && (a.state.delayingBlurEvent = !1);
    'nocursor' != a.options.readOnly &&
      (a.state.focused ||
        (K(a, 'focus', a),
        (a.state.focused = !0),
        mb(a.display.wrapper, 'CodeMirror-focused'),
        a.curOp ||
          a.display.selForContextMenu == a.doc.sel ||
          (a.display.input.reset(),
          J &&
            setTimeout(function () {
              a.display.input.reset(!0);
            }, 20)),
        a.display.input.receivedFocus()),
      Yc(a));
  }
  function db(a) {
    a.state.delayingBlurEvent ||
      (a.state.focused &&
        (K(a, 'blur', a),
        (a.state.focused = !1),
        kb(a.display.wrapper, 'CodeMirror-focused')),
      clearInterval(a.display.blinker),
      setTimeout(function () {
        a.state.focused || (a.display.shift = !1);
      }, 150));
  }
  function qe(a, b) {
    var c;
    (c = oa(a.display, b)) ||
      (c = S(a, 'gutterContextMenu')
        ? hd(a, b, 'gutterContextMenu', !1, K)
        : !1);
    if (!c) a.display.input.onContextMenu(b);
  }
  function De(a, b) {
    if (0 > y(a, b.from)) return a;
    if (0 >= y(a, b.to)) return ta(b);
    var c = a.line + b.text.length - (b.to.line - b.from.line) - 1,
      d = a.ch;
    a.line == b.to.line && (d += ta(b).ch - b.to.ch);
    return r(c, d);
  }
  function nd(a, b) {
    for (var c = [], d = 0; d < a.sel.ranges.length; d++) {
      var e = a.sel.ranges[d];
      c.push(new z(De(e.anchor, b), De(e.head, b)));
    }
    return Z(c, a.sel.primIndex);
  }
  function Ee(a, b, c) {
    return a.line == b.line
      ? r(c.line, a.ch - b.ch + c.ch)
      : r(c.line + (a.line - b.line), a.ch);
  }
  function Fe(a, b, c) {
    b = {
      canceled: !1,
      from: b.from,
      to: b.to,
      text: b.text,
      origin: b.origin,
      cancel: function () {
        this.canceled = !0;
      },
    };
    c &&
      (b.update = function (b, c, f, g) {
        b && (this.from = w(a, b));
        c && (this.to = w(a, c));
        f && (this.text = f);
        void 0 !== g && (this.origin = g);
      });
    K(a, 'beforeChange', a, b);
    a.cm && K(a.cm, 'beforeChange', a.cm, b);
    return b.canceled
      ? null
      : { from: b.from, to: b.to, text: b.text, origin: b.origin };
  }
  function Oa(a, b, c) {
    if (a.cm) {
      if (!a.cm.curOp) return G(a.cm, Oa)(a, b, c);
      if (a.cm.state.suppressEdits) return;
    }
    if (S(a, 'beforeChange') || (a.cm && S(a.cm, 'beforeChange')))
      if (((b = Fe(a, b, !0)), !b)) return;
    if ((c = Ge && !c && Uf(a, b.from, b.to)))
      for (var d = c.length - 1; 0 <= d; --d)
        He(a, { from: c[d].from, to: c[d].to, text: d ? [''] : b.text });
    else He(a, b);
  }
  function He(a, b) {
    if (1 != b.text.length || '' != b.text[0] || 0 != y(b.from, b.to)) {
      var c = nd(a, b);
      Ie(a, b, c, a.cm ? a.cm.curOp.id : NaN);
      yb(a, b, c, od(a, b));
      var d = [];
      Ga(a, function (a, c) {
        c || -1 != D(d, a.history) || (Je(a.history, b), d.push(a.history));
        yb(a, b, null, od(a, b));
      });
    }
  }
  function kc(a, b, c) {
    if (!a.cm || !a.cm.state.suppressEdits) {
      for (
        var d = a.history,
          e,
          f = a.sel,
          g = 'undo' == b ? d.done : d.undone,
          h = 'undo' == b ? d.undone : d.done,
          k = 0;
        k < g.length &&
        ((e = g[k]), c ? !e.ranges || e.equals(a.sel) : e.ranges);
        k++
      );
      if (k != g.length) {
        for (d.lastOrigin = d.lastSelOrigin = null; ; )
          if (((e = g.pop()), e.ranges)) {
            Wb(e, h);
            if (c && !e.equals(a.sel)) {
              H(a, e, { clearRedo: !1 });
              return;
            }
            f = e;
          } else break;
        c = [];
        Wb(f, h);
        h.push({ changes: c, generation: d.generation });
        d.generation = e.generation || ++d.maxGeneration;
        d = S(a, 'beforeChange') || (a.cm && S(a.cm, 'beforeChange'));
        for (k = e.changes.length - 1; 0 <= k; --k) {
          var l = e.changes[k];
          l.origin = b;
          if (d && !Fe(a, l, !1)) {
            g.length = 0;
            break;
          }
          c.push(pd(a, l));
          f = k ? nd(a, l) : A(g);
          yb(a, l, f, Ke(a, l));
          !k && a.cm && a.cm.scrollIntoView({ from: l.from, to: ta(l) });
          var m = [];
          Ga(a, function (a, b) {
            b || -1 != D(m, a.history) || (Je(a.history, l), m.push(a.history));
            yb(a, l, null, Ke(a, l));
          });
        }
      }
    }
  }
  function Le(a, b) {
    if (
      0 != b &&
      ((a.first += b),
      (a.sel = new la(
        ob(a.sel.ranges, function (a) {
          return new z(
            r(a.anchor.line + b, a.anchor.ch),
            r(a.head.line + b, a.head.ch)
          );
        }),
        a.sel.primIndex
      )),
      a.cm)
    ) {
      Q(a.cm, a.first, a.first - b, b);
      for (var c = a.cm.display, d = c.viewFrom; d < c.viewTo; d++)
        na(a.cm, d, 'gutter');
    }
  }
  function yb(a, b, c, d) {
    if (a.cm && !a.cm.curOp) return G(a.cm, yb)(a, b, c, d);
    if (b.to.line < a.first)
      Le(a, b.text.length - 1 - (b.to.line - b.from.line));
    else if (!(b.from.line > a.lastLine())) {
      if (b.from.line < a.first) {
        var e = b.text.length - 1 - (a.first - b.from.line);
        Le(a, e);
        b = {
          from: r(a.first, 0),
          to: r(b.to.line + e, b.to.ch),
          text: [A(b.text)],
          origin: b.origin,
        };
      }
      e = a.lastLine();
      b.to.line > e &&
        (b = {
          from: b.from,
          to: r(e, u(a, e).text.length),
          text: [b.text[0]],
          origin: b.origin,
        });
      b.removed = Da(a, b.from, b.to);
      c || (c = nd(a, b));
      a.cm ? Vf(a.cm, b, d) : qd(a, b, d);
      Vb(a, c, ha);
    }
  }
  function Vf(a, b, c) {
    var d = a.doc,
      e = a.display,
      f = b.from,
      g = b.to,
      h = !1,
      k = f.line;
    a.options.lineWrapping ||
      ((k = F(ia(u(d, f.line)))),
      d.iter(k, g.line + 1, function (a) {
        if (a == e.maxLine) return (h = !0);
      }));
    -1 < d.sel.contains(b.from, b.to) && fe(a);
    qd(d, b, c, Id(a));
    a.options.lineWrapping ||
      (d.iter(k, f.line + b.text.length, function (a) {
        var b = Kb(a);
        b > e.maxLineLength &&
          ((e.maxLine = a),
          (e.maxLineLength = b),
          (e.maxLineChanged = !0),
          (h = !1));
      }),
      h && (a.curOp.updateMaxLine = !0));
    d.frontier = Math.min(d.frontier, f.line);
    fb(a, 400);
    c = b.text.length - (g.line - f.line) - 1;
    b.full
      ? Q(a)
      : f.line != g.line || 1 != b.text.length || Me(a.doc, b)
      ? Q(a, f.line, g.line + 1, c)
      : na(a, f.line, 'text');
    c = S(a, 'changes');
    if ((d = S(a, 'change')) || c)
      (b = {
        from: f,
        to: g,
        text: b.text,
        removed: b.removed,
        origin: b.origin,
      }),
        d && L(a, 'change', a, b),
        c && (a.curOp.changeObjs || (a.curOp.changeObjs = [])).push(b);
    a.display.selForContextMenu = null;
  }
  function wb(a, b, c, d, e) {
    d || (d = c);
    if (0 > y(d, c)) {
      var f = d;
      d = c;
      c = f;
    }
    'string' == typeof b && (b = sa(b));
    Oa(a, { from: c, to: d, text: b, origin: e });
  }
  function cc(a, b, c, d, e) {
    var f = a.display,
      g = xa(a.display);
    0 > c && (c = 0);
    var h =
        a.curOp && null != a.curOp.scrollTop
          ? a.curOp.scrollTop
          : f.scroller.scrollTop,
      k = Nc(a),
      l = {};
    e - c > k && (e = c + k);
    var m = a.doc.height + Ec(f),
      p = c < g,
      g = e > m - g;
    c < h
      ? (l.scrollTop = p ? 0 : c)
      : e > h + k &&
        ((c = Math.min(c, (g ? m : e) - k)), c != h && (l.scrollTop = c));
    h =
      a.curOp && null != a.curOp.scrollLeft
        ? a.curOp.scrollLeft
        : f.scroller.scrollLeft;
    a = pa(a) - (a.options.fixedGutter ? f.gutters.offsetWidth : 0);
    (f = d - b > a) && (d = b + a);
    10 > b
      ? (l.scrollLeft = 0)
      : b < h
      ? (l.scrollLeft = Math.max(0, b - (f ? 0 : 10)))
      : d > a + h - 3 && (l.scrollLeft = d + (f ? 0 : 10) - a);
    return l;
  }
  function lc(a, b, c) {
    (null == b && null == c) || mc(a);
    null != b &&
      (a.curOp.scrollLeft =
        (null == a.curOp.scrollLeft ? a.doc.scrollLeft : a.curOp.scrollLeft) +
        b);
    null != c &&
      (a.curOp.scrollTop =
        (null == a.curOp.scrollTop ? a.doc.scrollTop : a.curOp.scrollTop) + c);
  }
  function Pa(a) {
    mc(a);
    var b = a.getCursor(),
      c = b,
      d = b;
    a.options.lineWrapping ||
      ((c = b.ch ? r(b.line, b.ch - 1) : b), (d = r(b.line, b.ch + 1)));
    a.curOp.scrollToPos = {
      from: c,
      to: d,
      margin: a.options.cursorScrollMargin,
      isCursor: !0,
    };
  }
  function mc(a) {
    var b = a.curOp.scrollToPos;
    if (b) {
      a.curOp.scrollToPos = null;
      var c = oe(a, b.from),
        d = oe(a, b.to),
        b = cc(
          a,
          Math.min(c.left, d.left),
          Math.min(c.top, d.top) - b.margin,
          Math.max(c.right, d.right),
          Math.max(c.bottom, d.bottom) + b.margin
        );
      a.scrollTo(b.scrollLeft, b.scrollTop);
    }
  }
  function pb(a, b, c, d) {
    var e = a.doc,
      f;
    null == c && (c = 'add');
    'smart' == c && (e.mode.indent ? (f = sb(a, b)) : (c = 'prev'));
    var g = a.options.tabSize,
      h = u(e, b),
      k = aa(h.text, null, g);
    h.stateAfter && (h.stateAfter = null);
    var l = h.text.match(/^\s*/)[0],
      m;
    if (!d && !/\S/.test(h.text)) (m = 0), (c = 'not');
    else if (
      'smart' == c &&
      ((m = e.mode.indent(f, h.text.slice(l.length), h.text)),
      m == Ae || 150 < m)
    ) {
      if (!d) return;
      c = 'prev';
    }
    'prev' == c
      ? (m = b > e.first ? aa(u(e, b - 1).text, null, g) : 0)
      : 'add' == c
      ? (m = k + a.options.indentUnit)
      : 'subtract' == c
      ? (m = k - a.options.indentUnit)
      : 'number' == typeof c && (m = k + c);
    m = Math.max(0, m);
    c = '';
    d = 0;
    if (a.options.indentWithTabs)
      for (a = Math.floor(m / g); a; --a) (d += g), (c += '\t');
    d < m && (c += Ne(m - d));
    if (c != l)
      return (
        wb(e, c, r(b, 0), r(b, l.length), '+input'), (h.stateAfter = null), !0
      );
    for (a = 0; a < e.sel.ranges.length; a++)
      if (((g = e.sel.ranges[a]), g.head.line == b && g.head.ch < l.length)) {
        d = r(b, l.length);
        Xc(e, a, new z(d, d));
        break;
      }
  }
  function nc(a, b, c, d) {
    var e = b,
      f = b;
    'number' == typeof b
      ? (f = u(a, Math.max(a.first, Math.min(b, a.first + a.size - 1))))
      : (e = F(b));
    if (null == e) return null;
    d(f, e) && a.cm && na(a.cm, e, c);
    return f;
  }
  function Va(a, b) {
    for (var c = a.doc.sel.ranges, d = [], e = 0; e < c.length; e++) {
      for (var f = b(c[e]); d.length && 0 >= y(f.from, A(d).to); ) {
        var g = d.pop();
        if (0 > y(g.from, f.from)) {
          f.from = g.from;
          break;
        }
      }
      d.push(f);
    }
    T(a, function () {
      for (var b = d.length - 1; 0 <= b; b--)
        wb(a.doc, '', d[b].from, d[b].to, '+delete');
      Pa(a);
    });
  }
  function rd(a, b, c, d, e) {
    function f(b) {
      var d = (e ? gd : Oe)(l, h, c, !0);
      if (null == d) {
        if ((b = !b))
          (b = g + c),
            b < a.first || b >= a.first + a.size
              ? (b = m = !1)
              : ((g = b), (b = l = u(a, b)));
        if (b) h = e ? (0 > c ? bc : ac)(l) : 0 > c ? l.text.length : 0;
        else return (m = !1);
      } else h = d;
      return !0;
    }
    var g = b.line,
      h = b.ch,
      k = c,
      l = u(a, g),
      m = !0;
    if ('char' == d) f();
    else if ('column' == d) f(!0);
    else if ('word' == d || 'group' == d) {
      var p = null;
      d = 'group' == d;
      b = a.cm && a.cm.getHelper(b, 'wordChars');
      for (var n = !0; !(0 > c) || f(!n); n = !1) {
        var q = l.text.charAt(h) || '\n',
          q = oc(q, b)
            ? 'w'
            : d && '\n' == q
            ? 'n'
            : !d || /\s/.test(q)
            ? null
            : 'p';
        !d || n || q || (q = 's');
        if (p && p != q) {
          0 > c && ((c = 1), f());
          break;
        }
        q && (p = q);
        if (0 < c && !f(!n)) break;
      }
    }
    k = Xb(a, r(g, h), k, !0);
    m || (k.hitSide = !0);
    return k;
  }
  function Pe(a, b, c, d) {
    var e = a.doc,
      f = b.left,
      g;
    'page' == d
      ? ((g = Math.min(
          a.display.wrapper.clientHeight,
          window.innerHeight || document.documentElement.clientHeight
        )),
        (g = b.top + c * (g - (0 > c ? 1.5 : 0.5) * xa(a.display))))
      : 'line' == d && (g = 0 < c ? b.bottom + 3 : b.top - 3);
    for (;;) {
      b = fd(a, f, g);
      if (!b.outside) break;
      if (0 > c ? 0 >= g : g >= e.height) {
        b.hitSide = !0;
        break;
      }
      g += 5 * c;
    }
    return b;
  }
  function x(a, b, c, d) {
    q.defaults[a] = b;
    c &&
      (Ka[a] = d
        ? function (a, b, d) {
            d != Fd && c(a, b, d);
          }
        : c);
  }
  function Wf(a) {
    var b = a.split(/-(?!$)/);
    a = b[b.length - 1];
    for (var c, d, e, f, g = 0; g < b.length - 1; g++) {
      var h = b[g];
      if (/^(cmd|meta|m)$/i.test(h)) f = !0;
      else if (/^a(lt)?$/i.test(h)) c = !0;
      else if (/^(c|ctrl|control)$/i.test(h)) d = !0;
      else if (/^s(hift)$/i.test(h)) e = !0;
      else throw Error('Unrecognized modifier name: ' + h);
    }
    c && (a = 'Alt-' + a);
    d && (a = 'Ctrl-' + a);
    f && (a = 'Cmd-' + a);
    e && (a = 'Shift-' + a);
    return a;
  }
  function pc(a) {
    return 'string' == typeof a ? ua[a] : a;
  }
  function Wa(a, b, c, d, e) {
    if (d && d.shared) return Xf(a, b, c, d, e);
    if (a.cm && !a.cm.curOp) return G(a.cm, Wa)(a, b, c, d, e);
    var f = new Ha(a, e);
    e = y(b, c);
    d && V(d, f, !1);
    if (0 < e || (0 == e && !1 !== f.clearWhenEmpty)) return f;
    f.replacedWith &&
      ((f.collapsed = !0),
      (f.widgetNode = t('span', [f.replacedWith], 'CodeMirror-widget')),
      d.handleMouseEvents ||
        f.widgetNode.setAttribute('cm-ignore-events', 'true'),
      d.insertLeft && (f.widgetNode.insertLeft = !0));
    if (f.collapsed) {
      if (
        Qe(a, b.line, b, c, f) ||
        (b.line != c.line && Qe(a, c.line, b, c, f))
      )
        throw Error(
          'Inserting collapsed marker partially overlapping an existing one'
        );
      ra = !0;
    }
    f.addToHistory && Ie(a, { from: b, to: c, origin: 'markText' }, a.sel, NaN);
    var g = b.line,
      h = a.cm,
      k;
    a.iter(g, c.line + 1, function (a) {
      h &&
        f.collapsed &&
        !h.options.lineWrapping &&
        ia(a) == h.display.maxLine &&
        (k = !0);
      f.collapsed && g != b.line && ca(a, 0);
      var d = new qc(f, g == b.line ? b.ch : null, g == c.line ? c.ch : null);
      a.markedSpans = a.markedSpans ? a.markedSpans.concat([d]) : [d];
      d.marker.attachLine(a);
      ++g;
    });
    f.collapsed &&
      a.iter(b.line, c.line + 1, function (b) {
        ya(a, b) && ca(b, 0);
      });
    f.clearOnEnter &&
      v(f, 'beforeCursorEnter', function () {
        f.clear();
      });
    f.readOnly &&
      ((Ge = !0),
      (a.history.done.length || a.history.undone.length) && a.clearHistory());
    f.collapsed && ((f.id = ++sd), (f.atomic = !0));
    if (h) {
      k && (h.curOp.updateMaxLine = !0);
      if (f.collapsed) Q(h, b.line, c.line + 1);
      else if (f.className || f.title || f.startStyle || f.endStyle || f.css)
        for (d = b.line; d <= c.line; d++) na(h, d, 'text');
      f.atomic && ge(h.doc);
      L(h, 'markerAdded', h, f);
    }
    return f;
  }
  function Xf(a, b, c, d, e) {
    d = V(d);
    d.shared = !1;
    var f = [Wa(a, b, c, d, e)],
      g = f[0],
      h = d.widgetNode;
    Ga(a, function (a) {
      h && (d.widgetNode = h.cloneNode(!0));
      f.push(Wa(a, w(a, b), w(a, c), d, e));
      for (var l = 0; l < a.linked.length; ++l)
        if (a.linked[l].isParent) return;
      g = A(f);
    });
    return new rc(f, g);
  }
  function Re(a) {
    return a.findMarks(r(a.first, 0), a.clipPos(r(a.lastLine())), function (a) {
      return a.parent;
    });
  }
  function Yf(a) {
    for (var b = 0; b < a.length; b++) {
      var c = a[b],
        d = [c.primary.doc];
      Ga(c.primary.doc, function (a) {
        d.push(a);
      });
      for (var e = 0; e < c.markers.length; e++) {
        var f = c.markers[e];
        -1 == D(d, f.doc) && ((f.parent = null), c.markers.splice(e--, 1));
      }
    }
  }
  function qc(a, b, c) {
    this.marker = a;
    this.from = b;
    this.to = c;
  }
  function zb(a, b) {
    if (a)
      for (var c = 0; c < a.length; ++c) {
        var d = a[c];
        if (d.marker == b) return d;
      }
  }
  function od(a, b) {
    if (b.full) return null;
    var c = qb(a, b.from.line) && u(a, b.from.line).markedSpans,
      d = qb(a, b.to.line) && u(a, b.to.line).markedSpans;
    if (!c && !d) return null;
    var e = b.from.ch,
      f = b.to.ch,
      g = 0 == y(b.from, b.to);
    if (c)
      for (var h = 0, k; h < c.length; ++h) {
        var l = c[h],
          m = l.marker;
        if (
          null == l.from ||
          (m.inclusiveLeft ? l.from <= e : l.from < e) ||
          !(l.from != e || 'bookmark' != m.type || (g && l.marker.insertLeft))
        ) {
          var p = null == l.to || (m.inclusiveRight ? l.to >= e : l.to > e);
          (k || (k = [])).push(new qc(m, l.from, p ? null : l.to));
        }
      }
    c = k;
    if (d)
      for (var h = 0, n; h < d.length; ++h)
        if (
          ((k = d[h]),
          (l = k.marker),
          null == k.to ||
            (l.inclusiveRight ? k.to >= f : k.to > f) ||
            (k.from == f &&
              'bookmark' == l.type &&
              (!g || k.marker.insertLeft)))
        )
          (m = null == k.from || (l.inclusiveLeft ? k.from <= f : k.from < f)),
            (n || (n = [])).push(
              new qc(l, m ? null : k.from - f, null == k.to ? null : k.to - f)
            );
    d = n;
    g = 1 == b.text.length;
    n = A(b.text).length + (g ? e : 0);
    if (c)
      for (f = 0; f < c.length; ++f)
        if (((h = c[f]), null == h.to))
          ((k = zb(d, h.marker)), k)
            ? g && (h.to = null == k.to ? null : k.to + n)
            : (h.to = e);
    if (d)
      for (f = 0; f < d.length; ++f)
        (h = d[f]),
          null != h.to && (h.to += n),
          null == h.from
            ? ((k = zb(c, h.marker)),
              k || ((h.from = n), g && (c || (c = [])).push(h)))
            : ((h.from += n), g && (c || (c = [])).push(h));
    c && (c = Se(c));
    d && d != c && (d = Se(d));
    e = [c];
    if (!g) {
      var g = b.text.length - 2,
        q;
      if (0 < g && c)
        for (f = 0; f < c.length; ++f)
          null == c[f].to &&
            (q || (q = [])).push(new qc(c[f].marker, null, null));
      for (f = 0; f < g; ++f) e.push(q);
      e.push(d);
    }
    return e;
  }
  function Se(a) {
    for (var b = 0; b < a.length; ++b) {
      var c = a[b];
      null != c.from &&
        c.from == c.to &&
        !1 !== c.marker.clearWhenEmpty &&
        a.splice(b--, 1);
    }
    return a.length ? a : null;
  }
  function Ke(a, b) {
    var c;
    if ((c = b['spans_' + a.id])) {
      for (var d = 0, e = []; d < b.text.length; ++d) e.push(Zf(c[d]));
      c = e;
    } else c = null;
    d = od(a, b);
    if (!c) return d;
    if (!d) return c;
    for (e = 0; e < c.length; ++e) {
      var f = c[e],
        g = d[e];
      if (f && g) {
        var h = 0;
        a: for (; h < g.length; ++h) {
          for (var k = g[h], l = 0; l < f.length; ++l)
            if (f[l].marker == k.marker) continue a;
          f.push(k);
        }
      } else g && (c[e] = g);
    }
    return c;
  }
  function Uf(a, b, c) {
    var d = null;
    a.iter(b.line, c.line + 1, function (a) {
      if (a.markedSpans)
        for (var b = 0; b < a.markedSpans.length; ++b) {
          var c = a.markedSpans[b].marker;
          !c.readOnly || (d && -1 != D(d, c)) || (d || (d = [])).push(c);
        }
    });
    if (!d) return null;
    a = [{ from: b, to: c }];
    for (b = 0; b < d.length; ++b) {
      c = d[b];
      for (var e = c.find(0), f = 0; f < a.length; ++f) {
        var g = a[f];
        if (!(0 > y(g.to, e.from) || 0 < y(g.from, e.to))) {
          var h = [f, 1],
            k = y(g.from, e.from),
            l = y(g.to, e.to);
          (0 > k || (!c.inclusiveLeft && !k)) &&
            h.push({ from: g.from, to: e.from });
          (0 < l || (!c.inclusiveRight && !l)) &&
            h.push({ from: e.to, to: g.to });
          a.splice.apply(a, h);
          f += h.length - 1;
        }
      }
    }
    return a;
  }
  function Te(a) {
    var b = a.markedSpans;
    if (b) {
      for (var c = 0; c < b.length; ++c) b[c].marker.detachLine(a);
      a.markedSpans = null;
    }
  }
  function Ue(a, b) {
    if (b) {
      for (var c = 0; c < b.length; ++c) b[c].marker.attachLine(a);
      a.markedSpans = b;
    }
  }
  function Ve(a, b) {
    var c = a.lines.length - b.lines.length;
    if (0 != c) return c;
    var c = a.find(),
      d = b.find(),
      e =
        y(c.from, d.from) ||
        (a.inclusiveLeft ? -1 : 0) - (b.inclusiveLeft ? -1 : 0);
    return e
      ? -e
      : (c =
          y(c.to, d.to) ||
          (a.inclusiveRight ? 1 : 0) - (b.inclusiveRight ? 1 : 0))
      ? c
      : b.id - a.id;
  }
  function Aa(a, b) {
    var c = ra && a.markedSpans,
      d;
    if (c)
      for (var e, f = 0; f < c.length; ++f)
        (e = c[f]),
          e.marker.collapsed &&
            null == (b ? e.from : e.to) &&
            (!d || 0 > Ve(d, e.marker)) &&
            (d = e.marker);
    return d;
  }
  function Qe(a, b, c, d, e) {
    a = u(a, b);
    if ((a = ra && a.markedSpans))
      for (b = 0; b < a.length; ++b) {
        var f = a[b];
        if (f.marker.collapsed) {
          var g = f.marker.find(0),
            h =
              y(g.from, c) ||
              (f.marker.inclusiveLeft ? -1 : 0) - (e.inclusiveLeft ? -1 : 0),
            k =
              y(g.to, d) ||
              (f.marker.inclusiveRight ? 1 : 0) - (e.inclusiveRight ? 1 : 0);
          if (
            !((0 <= h && 0 >= k) || (0 >= h && 0 <= k)) &&
            ((0 >= h &&
              (0 < y(g.to, c) ||
                (f.marker.inclusiveRight && e.inclusiveLeft))) ||
              (0 <= h &&
                (0 > y(g.from, d) ||
                  (f.marker.inclusiveLeft && e.inclusiveRight))))
          )
            return !0;
        }
      }
  }
  function ia(a) {
    for (var b; (b = Aa(a, !0)); ) a = b.find(-1, !0).line;
    return a;
  }
  function Mc(a, b) {
    var c = u(a, b),
      d = ia(c);
    return c == d ? b : F(d);
  }
  function Ld(a, b) {
    if (b > a.lastLine()) return b;
    var c = u(a, b),
      d;
    if (!ya(a, c)) return b;
    for (; (d = Aa(c, !1)); ) c = d.find(1, !0).line;
    return F(c) + 1;
  }
  function ya(a, b) {
    var c = ra && b.markedSpans;
    if (c)
      for (var d, e = 0; e < c.length; ++e)
        if (
          ((d = c[e]),
          d.marker.collapsed &&
            (null == d.from ||
              (!d.marker.widgetNode &&
                0 == d.from &&
                d.marker.inclusiveLeft &&
                td(a, b, d))))
        )
          return !0;
  }
  function td(a, b, c) {
    if (null == c.to)
      return (
        (b = c.marker.find(1, !0)),
        td(a, b.line, zb(b.line.markedSpans, c.marker))
      );
    if (c.marker.inclusiveRight && c.to == b.text.length) return !0;
    for (var d, e = 0; e < b.markedSpans.length; ++e)
      if (
        ((d = b.markedSpans[e]),
        d.marker.collapsed &&
          !d.marker.widgetNode &&
          d.from == c.to &&
          (null == d.to || d.to != c.from) &&
          (d.marker.inclusiveLeft || c.marker.inclusiveRight) &&
          td(a, b, d))
      )
        return !0;
  }
  function ub(a) {
    if (null != a.height) return a.height;
    var b = a.doc.cm;
    if (!b) return 0;
    if (!Wc(document.body, a.node)) {
      var c = 'position: relative;';
      a.coverGutter &&
        (c += 'margin-left: -' + b.display.gutters.offsetWidth + 'px;');
      a.noHScroll && (c += 'width: ' + b.display.wrapper.clientWidth + 'px;');
      U(b.display.measure, t('div', [a.node], null, c));
    }
    return (a.height = a.node.offsetHeight);
  }
  function $f(a, b, c, d) {
    var e = new sc(a, c, d),
      f = a.cm;
    f && e.noHScroll && (f.display.alignWidgets = !0);
    nc(a, b, 'widget', function (b) {
      var c = b.widgets || (b.widgets = []);
      null == e.insertAt
        ? c.push(e)
        : c.splice(Math.min(c.length - 1, Math.max(0, e.insertAt)), 0, e);
      e.line = b;
      f &&
        !ya(a, b) &&
        ((c = ea(b) < a.scrollTop),
        ca(b, b.height + ub(e)),
        c && lc(f, null, e.height),
        (f.curOp.forceUpdate = !0));
      return !0;
    });
    return e;
  }
  function We(a, b) {
    if (a)
      for (;;) {
        var c = a.match(/(?:^|\s+)line-(background-)?(\S+)/);
        if (!c) break;
        a = a.slice(0, c.index) + a.slice(c.index + c[0].length);
        var d = c[1] ? 'bgClass' : 'textClass';
        null == b[d]
          ? (b[d] = c[2])
          : new RegExp('(?:^|s)' + c[2] + '(?:$|s)').test(b[d]) ||
            (b[d] += ' ' + c[2]);
      }
    return a;
  }
  function Xe(a, b) {
    if (a.blankLine) return a.blankLine(b);
    if (a.innerMode) {
      var c = q.innerMode(a, b);
      if (c.mode.blankLine) return c.mode.blankLine(c.state);
    }
  }
  function ud(a, b, c, d) {
    for (var e = 0; 10 > e; e++) {
      d && (d[0] = q.innerMode(a, c).mode);
      var f = a.token(b, c);
      if (b.pos > b.start) return f;
    }
    throw Error('Mode ' + a.name + ' failed to advance stream.');
  }
  function Ye(a, b, c, d) {
    function e(a) {
      return {
        start: m.start,
        end: m.pos,
        string: m.current(),
        type: h || null,
        state: a ? Sa(f.mode, l) : l,
      };
    }
    var f = a.doc,
      g = f.mode,
      h;
    b = w(f, b);
    var k = u(f, b.line),
      l = sb(a, b.line, c),
      m = new tc(k.text, a.options.tabSize),
      p;
    for (d && (p = []); (d || m.pos < b.ch) && !m.eol(); )
      (m.start = m.pos), (h = ud(g, m, l)), d && p.push(e(!0));
    return d ? p : e();
  }
  function Ze(a, b, c, d, e, f, g) {
    var h = c.flattenSpans;
    null == h && (h = a.options.flattenSpans);
    var k = 0,
      l = null,
      m = new tc(b, a.options.tabSize),
      p,
      n = a.options.addModeClass && [null];
    for ('' == b && We(Xe(c, d), f); !m.eol(); ) {
      m.pos > a.options.maxHighlightLength
        ? ((h = !1), g && Zc(a, b, d, m.pos), (m.pos = b.length), (p = null))
        : (p = We(ud(c, m, d, n), f));
      if (n) {
        var q = n[0].name;
        q && (p = 'm-' + (p ? q + ' ' + p : q));
      }
      if (!h || l != p) {
        for (; k < m.start; ) (k = Math.min(m.start, k + 5e4)), e(k, l);
        l = p;
      }
      m.start = m.pos;
    }
    for (; k < m.pos; ) (a = Math.min(m.pos, k + 5e4)), e(a, l), (k = a);
  }
  function je(a, b, c, d) {
    var e = [a.state.modeGen],
      f = {};
    Ze(
      a,
      b.text,
      a.doc.mode,
      c,
      function (a, b) {
        e.push(a, b);
      },
      f,
      d
    );
    for (c = 0; c < a.state.overlays.length; ++c) {
      var g = a.state.overlays[c],
        h = 1,
        k = 0;
      Ze(
        a,
        b.text,
        g.mode,
        !0,
        function (a, b) {
          for (var c = h; k < a; ) {
            var d = e[h];
            d > a && e.splice(h, 1, a, e[h + 1], d);
            h += 2;
            k = Math.min(a, d);
          }
          if (b)
            if (g.opaque) e.splice(c, h - c, a, 'cm-overlay ' + b), (h = c + 2);
            else
              for (; c < h; c += 2)
                (d = e[c + 1]),
                  (e[c + 1] = (d ? d + ' ' : '') + 'cm-overlay ' + b);
        },
        f
      );
    }
    return { styles: e, classes: f.bgClass || f.textClass ? f : null };
  }
  function $e(a, b, c) {
    if (!b.styles || b.styles[0] != a.state.modeGen) {
      var d = je(a, b, (b.stateAfter = sb(a, F(b))));
      b.styles = d.styles;
      d.classes
        ? (b.styleClasses = d.classes)
        : b.styleClasses && (b.styleClasses = null);
      c === a.doc.frontier && a.doc.frontier++;
    }
    return b.styles;
  }
  function Zc(a, b, c, d) {
    var e = a.doc.mode,
      f = new tc(b, a.options.tabSize);
    f.start = f.pos = d || 0;
    for (
      '' == b && Xe(e, c);
      !f.eol() && f.pos <= a.options.maxHighlightLength;

    )
      ud(e, f, c), (f.start = f.pos);
  }
  function af(a, b) {
    if (!a || /^\s*$/.test(a)) return null;
    var c = b.addModeClass ? ag : bg;
    return c[a] || (c[a] = a.replace(/\S+/g, 'cm-$\x26'));
  }
  function Sd(a, b) {
    var c = t('span', null, null, J ? 'padding-right: .1px' : null),
      c = {
        pre: t('pre', [c]),
        content: c,
        col: 0,
        pos: 0,
        cm: a,
        splitSpaces: (B || J) && a.getOption('lineWrapping'),
      };
    b.measure = {};
    for (var d = 0; d <= (b.rest ? b.rest.length : 0); d++) {
      var e = d ? b.rest[d - 1] : b.line,
        f;
      c.pos = 0;
      c.addToken = cg;
      var g;
      if (null != vd) g = vd;
      else {
        g = U(a.display.measure, document.createTextNode('AخA'));
        var h = Ea(g, 0, 1).getBoundingClientRect();
        g =
          h && h.left != h.right
            ? (vd = 3 > Ea(g, 1, 2).getBoundingClientRect().right - h.right)
            : !1;
      }
      g && (f = Y(e)) && (c.addToken = dg(c.addToken, f));
      c.map = [];
      h = b != a.display.externalMeasured && F(e);
      a: {
        g = c;
        var h = $e(a, e, h),
          k = e.markedSpans,
          l = e.text,
          m = 0;
        if (k)
          for (
            var p = l.length,
              n = 0,
              q = 1,
              r = '',
              u = void 0,
              v = void 0,
              w = 0,
              x = void 0,
              y = void 0,
              A = void 0,
              C = void 0,
              z = void 0;
            ;

          ) {
            if (w == n) {
              for (
                var x = (y = A = C = v = ''),
                  z = null,
                  w = Infinity,
                  G = [],
                  H = 0;
                H < k.length;
                ++H
              ) {
                var I = k[H],
                  D = I.marker;
                'bookmark' == D.type && I.from == n && D.widgetNode
                  ? G.push(D)
                  : I.from <= n &&
                    (null == I.to ||
                      I.to > n ||
                      (D.collapsed && I.to == n && I.from == n))
                  ? (null != I.to &&
                      I.to != n &&
                      w > I.to &&
                      ((w = I.to), (y = '')),
                    D.className && (x += ' ' + D.className),
                    D.css && (v = D.css),
                    D.startStyle && I.from == n && (A += ' ' + D.startStyle),
                    D.endStyle && I.to == w && (y += ' ' + D.endStyle),
                    D.title && !C && (C = D.title),
                    D.collapsed && (!z || 0 > Ve(z.marker, D)) && (z = I))
                  : I.from > n && w > I.from && (w = I.from);
              }
              if (z && (z.from || 0) == n) {
                bf(
                  g,
                  (null == z.to ? p + 1 : z.to) - n,
                  z.marker,
                  null == z.from
                );
                if (null == z.to) break a;
                z.to == n && (z = !1);
              }
              if (!z && G.length) for (H = 0; H < G.length; ++H) bf(g, 0, G[H]);
            }
            if (n >= p) break;
            for (G = Math.min(p, w); ; ) {
              if (r) {
                H = n + r.length;
                z ||
                  ((I = H > G ? r.slice(0, G - n) : r),
                  g.addToken(
                    g,
                    I,
                    u ? u + x : x,
                    A,
                    n + I.length == w ? y : '',
                    C,
                    v
                  ));
                if (H >= G) {
                  r = r.slice(G - n);
                  n = G;
                  break;
                }
                n = H;
                A = '';
              }
              r = l.slice(m, (m = h[q++]));
              u = af(h[q++], g.cm.options);
            }
          }
        else
          for (var q = 1; q < h.length; q += 2)
            g.addToken(g, l.slice(m, (m = h[q])), af(h[q + 1], g.cm.options));
      }
      e.styleClasses &&
        (e.styleClasses.bgClass &&
          (c.bgClass = wd(e.styleClasses.bgClass, c.bgClass || '')),
        e.styleClasses.textClass &&
          (c.textClass = wd(e.styleClasses.textClass, c.textClass || '')));
      0 == c.map.length &&
        c.map.push(0, 0, c.content.appendChild(eg(a.display.measure)));
      0 == d
        ? ((b.measure.map = c.map), (b.measure.cache = {}))
        : ((b.measure.maps || (b.measure.maps = [])).push(c.map),
          (b.measure.caches || (b.measure.caches = [])).push({}));
    }
    J &&
      /\bcm-tab\b/.test(c.content.lastChild.className) &&
      (c.content.className = 'cm-tab-wrap-hack');
    K(a, 'renderLine', a, b.line, c.pre);
    c.pre.className && (c.textClass = wd(c.pre.className, c.textClass || ''));
    return c;
  }
  function cg(a, b, c, d, e, f, g) {
    if (b) {
      var h = a.splitSpaces ? b.replace(/ {3,}/g, fg) : b,
        k = a.cm.state.specialChars,
        l = !1;
      if (k.test(b))
        for (var m = document.createDocumentFragment(), p = 0; ; ) {
          k.lastIndex = p;
          var n = k.exec(b),
            q = n ? n.index - p : b.length - p;
          if (q) {
            var r = document.createTextNode(h.slice(p, p + q));
            B && 9 > C ? m.appendChild(t('span', [r])) : m.appendChild(r);
            a.map.push(a.pos, a.pos + q, r);
            a.col += q;
            a.pos += q;
          }
          if (!n) break;
          p += q + 1;
          '\t' == n[0]
            ? ((r = a.cm.options.tabSize),
              (n = r - (a.col % r)),
              (r = m.appendChild(t('span', Ne(n), 'cm-tab'))),
              r.setAttribute('role', 'presentation'),
              r.setAttribute('cm-text', '\t'),
              (a.col += n))
            : ((r = a.cm.options.specialCharPlaceholder(n[0])),
              r.setAttribute('cm-text', n[0]),
              B && 9 > C ? m.appendChild(t('span', [r])) : m.appendChild(r),
              (a.col += 1));
          a.map.push(a.pos, a.pos + 1, r);
          a.pos++;
        }
      else {
        a.col += b.length;
        var m = document.createTextNode(h);
        a.map.push(a.pos, a.pos + b.length, m);
        B && 9 > C && (l = !0);
        a.pos += b.length;
      }
      if (c || d || e || l || g)
        return (
          (b = c || ''),
          d && (b += d),
          e && (b += e),
          (d = t('span', [m], b, g)),
          f && (d.title = f),
          a.content.appendChild(d)
        );
      a.content.appendChild(m);
    }
  }
  function fg(a) {
    for (var b = ' ', c = 0; c < a.length - 2; ++c) b += c % 2 ? ' ' : ' ';
    return b + ' ';
  }
  function dg(a, b) {
    return function (c, d, e, f, g, h, k) {
      e = e ? e + ' cm-force-border' : 'cm-force-border';
      for (var l = c.pos, m = l + d.length; ; ) {
        for (var p = 0; p < b.length; p++) {
          var n = b[p];
          if (n.to > l && n.from <= l) break;
        }
        if (n.to >= m) return a(c, d, e, f, g, h, k);
        a(c, d.slice(0, n.to - l), e, f, null, h, k);
        f = null;
        d = d.slice(n.to - l);
        l = n.to;
      }
    };
  }
  function bf(a, b, c, d) {
    var e = !d && c.widgetNode;
    e && a.map.push(a.pos, a.pos + b, e);
    !d &&
      a.cm.display.input.needsContentAttribute &&
      (e || (e = a.content.appendChild(document.createElement('span'))),
      e.setAttribute('cm-marker', c.id));
    e && (a.cm.display.input.setUneditable(e), a.content.appendChild(e));
    a.pos += b;
  }
  function Me(a, b) {
    return (
      0 == b.from.ch &&
      0 == b.to.ch &&
      '' == A(b.text) &&
      (!a.cm || a.cm.options.wholeLineUpdateBefore)
    );
  }
  function qd(a, b, c, d) {
    function e(a, c, e) {
      a.text = c;
      a.stateAfter && (a.stateAfter = null);
      a.styles && (a.styles = null);
      null != a.order && (a.order = null);
      Te(a);
      Ue(a, e);
      c = d ? d(a) : 1;
      c != a.height && ca(a, c);
      L(a, 'change', a, b);
    }
    function f(a, b) {
      for (var e = a, f = []; e < b; ++e)
        f.push(new Ab(k[e], c ? c[e] : null, d));
      return f;
    }
    var g = b.from,
      h = b.to,
      k = b.text,
      l = u(a, g.line),
      m = u(a, h.line),
      p = A(k),
      n = c ? c[k.length - 1] : null,
      q = h.line - g.line;
    if (b.full)
      a.insert(0, f(0, k.length)), a.remove(k.length, a.size - k.length);
    else if (Me(a, b)) {
      var r = f(0, k.length - 1);
      e(m, m.text, n);
      q && a.remove(g.line, q);
      r.length && a.insert(g.line, r);
    } else
      l == m
        ? 1 == k.length
          ? e(l, l.text.slice(0, g.ch) + p + l.text.slice(h.ch), n)
          : ((r = f(1, k.length - 1)),
            r.push(new Ab(p + l.text.slice(h.ch), n, d)),
            e(l, l.text.slice(0, g.ch) + k[0], c ? c[0] : null),
            a.insert(g.line + 1, r))
        : 1 == k.length
        ? (e(
            l,
            l.text.slice(0, g.ch) + k[0] + m.text.slice(h.ch),
            c ? c[0] : null
          ),
          a.remove(g.line + 1, q))
        : (e(l, l.text.slice(0, g.ch) + k[0], c ? c[0] : null),
          e(m, p + m.text.slice(h.ch), n),
          (r = f(1, k.length - 1)),
          1 < q && a.remove(g.line + 1, q - 1),
          a.insert(g.line + 1, r));
    L(a, 'change', a, b);
  }
  function Bb(a) {
    this.lines = a;
    this.parent = null;
    for (var b = 0, c = 0; b < a.length; ++b)
      (a[b].parent = this), (c += a[b].height);
    this.height = c;
  }
  function Cb(a) {
    this.children = a;
    for (var b = 0, c = 0, d = 0; d < a.length; ++d) {
      var e = a[d],
        b = b + e.chunkSize(),
        c = c + e.height;
      e.parent = this;
    }
    this.size = b;
    this.height = c;
    this.parent = null;
  }
  function Ga(a, b, c) {
    function d(a, f, g) {
      if (a.linked)
        for (var h = 0; h < a.linked.length; ++h) {
          var k = a.linked[h];
          if (k.doc != f) {
            var l = g && k.sharedHist;
            if (!c || l) b(k.doc, l), d(k.doc, a, l);
          }
        }
    }
    d(a, null, !0);
  }
  function Ed(a, b) {
    if (b.cm) throw Error('This document is already in use.');
    a.doc = b;
    b.cm = a;
    Ac(a);
    zc(a);
    a.options.lineWrapping || Dc(a);
    a.options.mode = b.modeOption;
    Q(a);
  }
  function u(a, b) {
    b -= a.first;
    if (0 > b || b >= a.size)
      throw Error('There is no line ' + (b + a.first) + ' in the document.');
    for (var c = a; !c.lines; )
      for (var d = 0; ; ++d) {
        var e = c.children[d],
          f = e.chunkSize();
        if (b < f) {
          c = e;
          break;
        }
        b -= f;
      }
    return c.lines[b];
  }
  function Da(a, b, c) {
    var d = [],
      e = b.line;
    a.iter(b.line, c.line + 1, function (a) {
      a = a.text;
      e == c.line && (a = a.slice(0, c.ch));
      e == b.line && (a = a.slice(b.ch));
      d.push(a);
      ++e;
    });
    return d;
  }
  function xd(a, b, c) {
    var d = [];
    a.iter(b, c, function (a) {
      d.push(a.text);
    });
    return d;
  }
  function ca(a, b) {
    var c = b - a.height;
    if (c) for (var d = a; d; d = d.parent) d.height += c;
  }
  function F(a) {
    if (null == a.parent) return null;
    var b = a.parent;
    a = D(b.lines, a);
    for (var c = b.parent; c; b = c, c = c.parent)
      for (var d = 0; c.children[d] != b; ++d) a += c.children[d].chunkSize();
    return a + b.first;
  }
  function Ba(a, b) {
    var c = a.first;
    a: do {
      for (var d = 0; d < a.children.length; ++d) {
        var e = a.children[d],
          f = e.height;
        if (b < f) {
          a = e;
          continue a;
        }
        b -= f;
        c += e.chunkSize();
      }
      return c;
    } while (!a.lines);
    for (d = 0; d < a.lines.length; ++d) {
      e = a.lines[d].height;
      if (b < e) break;
      b -= e;
    }
    return c + d;
  }
  function ea(a) {
    a = ia(a);
    for (var b = 0, c = a.parent, d = 0; d < c.lines.length; ++d) {
      var e = c.lines[d];
      if (e == a) break;
      else b += e.height;
    }
    for (a = c.parent; a; c = a, a = c.parent)
      for (d = 0; d < a.children.length && ((e = a.children[d]), e != c); ++d)
        b += e.height;
    return b;
  }
  function Y(a) {
    var b = a.order;
    null == b && (b = a.order = gg(a.text));
    return b;
  }
  function uc(a) {
    this.done = [];
    this.undone = [];
    this.undoDepth = Infinity;
    this.lastModTime = this.lastSelTime = 0;
    this.lastOrigin = this.lastSelOrigin = this.lastOp = this.lastSelOp = null;
    this.generation = this.maxGeneration = a || 1;
  }
  function pd(a, b) {
    var c = { from: Rc(b.from), to: ta(b), text: Da(a, b.from, b.to) };
    cf(a, c, b.from.line, b.to.line + 1);
    Ga(
      a,
      function (a) {
        cf(a, c, b.from.line, b.to.line + 1);
      },
      !0
    );
    return c;
  }
  function ce(a) {
    for (; a.length; )
      if (A(a).ranges) a.pop();
      else break;
  }
  function Ie(a, b, c, d) {
    var e = a.history;
    e.undone.length = 0;
    var f = +new Date(),
      g,
      h;
    if (
      (h =
        e.lastOp == d ||
        (e.lastOrigin == b.origin &&
          b.origin &&
          (('+' == b.origin.charAt(0) &&
            a.cm &&
            e.lastModTime > f - a.cm.options.historyEventDelay) ||
            '*' == b.origin.charAt(0))))
    )
      e.lastOp == d
        ? (ce(e.done), (g = A(e.done)))
        : e.done.length && !A(e.done).ranges
        ? (g = A(e.done))
        : 1 < e.done.length && !e.done[e.done.length - 2].ranges
        ? (e.done.pop(), (g = A(e.done)))
        : (g = void 0),
        (h = g);
    if (h) {
      var k = A(g.changes);
      0 == y(b.from, b.to) && 0 == y(b.from, k.to)
        ? (k.to = ta(b))
        : g.changes.push(pd(a, b));
    } else for (((g = A(e.done)) && g.ranges) || Wb(a.sel, e.done), g = { changes: [pd(a, b)], generation: e.generation }, e.done.push(g); e.done.length > e.undoDepth; ) e.done.shift(), e.done[0].ranges || e.done.shift();
    e.done.push(c);
    e.generation = ++e.maxGeneration;
    e.lastModTime = e.lastSelTime = f;
    e.lastOp = e.lastSelOp = d;
    e.lastOrigin = e.lastSelOrigin = b.origin;
    k || K(a, 'historyAdded');
  }
  function Wb(a, b) {
    var c = A(b);
    (c && c.ranges && c.equals(a)) || b.push(a);
  }
  function cf(a, b, c, d) {
    var e = b['spans_' + a.id],
      f = 0;
    a.iter(Math.max(a.first, c), Math.min(a.first + a.size, d), function (c) {
      c.markedSpans &&
        ((e || (e = b['spans_' + a.id] = {}))[f] = c.markedSpans);
      ++f;
    });
  }
  function Zf(a) {
    if (!a) return null;
    for (var b = 0, c; b < a.length; ++b)
      a[b].marker.explicitlyCleared
        ? c || (c = a.slice(0, b))
        : c && c.push(a[b]);
    return c ? (c.length ? c : null) : a;
  }
  function Xa(a, b, c) {
    for (var d = 0, e = []; d < a.length; ++d) {
      var f = a[d];
      if (f.ranges) e.push(c ? la.prototype.deepCopy.call(f) : f);
      else {
        var f = f.changes,
          g = [];
        e.push({ changes: g });
        for (var h = 0; h < f.length; ++h) {
          var k = f[h],
            l;
          g.push({ from: k.from, to: k.to, text: k.text });
          if (b)
            for (var m in k)
              (l = m.match(/^spans_(\d+)$/)) &&
                -1 < D(b, Number(l[1])) &&
                ((A(g)[m] = k[m]), delete k[m]);
        }
      }
    }
    return e;
  }
  function df(a, b, c, d) {
    c < a.line ? (a.line += d) : b < a.line && ((a.line = b), (a.ch = 0));
  }
  function ef(a, b, c, d) {
    for (var e = 0; e < a.length; ++e) {
      var f = a[e],
        g = !0;
      if (f.ranges) {
        f.copied || ((f = a[e] = f.deepCopy()), (f.copied = !0));
        for (var h = 0; h < f.ranges.length; h++)
          df(f.ranges[h].anchor, b, c, d), df(f.ranges[h].head, b, c, d);
      } else {
        for (h = 0; h < f.changes.length; ++h) {
          var k = f.changes[h];
          if (c < k.from.line)
            (k.from = r(k.from.line + d, k.from.ch)),
              (k.to = r(k.to.line + d, k.to.ch));
          else if (b <= k.to.line) {
            g = !1;
            break;
          }
        }
        g || (a.splice(0, e + 1), (e = 0));
      }
    }
  }
  function Je(a, b) {
    var c = b.from.line,
      d = b.to.line,
      e = b.text.length - (d - c) - 1;
    ef(a.done, c, d, e);
    ef(a.undone, c, d, e);
  }
  function ld(a) {
    return null != a.defaultPrevented ? a.defaultPrevented : 0 == a.returnValue;
  }
  function xe(a) {
    var b = a.which;
    null == b &&
      (a.button & 1
        ? (b = 1)
        : a.button & 2
        ? (b = 3)
        : a.button & 4 && (b = 2));
    W && a.ctrlKey && 1 == b && (b = 3);
    return b;
  }
  function L(a, b) {
    function c(a) {
      return function () {
        a.apply(null, e);
      };
    }
    var d = a._handlers && a._handlers[b];
    if (d) {
      var e = Array.prototype.slice.call(arguments, 2),
        f;
      Ta
        ? (f = Ta.delayedCallbacks)
        : Db
        ? (f = Db)
        : ((f = Db = []), setTimeout(hg, 0));
      for (var g = 0; g < d.length; ++g) f.push(c(d[g]));
    }
  }
  function hg() {
    var a = Db;
    Db = null;
    for (var b = 0; b < a.length; ++b) a[b]();
  }
  function ja(a, b, c) {
    'string' == typeof b &&
      (b = {
        type: b,
        preventDefault: function () {
          this.defaultPrevented = !0;
        },
      });
    K(a, c || b.type, a, b);
    return ld(b) || b.codemirrorIgnore;
  }
  function fe(a) {
    var b = a._handlers && a._handlers.cursorActivity;
    if (b) {
      a =
        a.curOp.cursorActivityHandlers || (a.curOp.cursorActivityHandlers = []);
      for (var c = 0; c < b.length; ++c) -1 == D(a, b[c]) && a.push(b[c]);
    }
  }
  function S(a, b) {
    var c = a._handlers && a._handlers[b];
    return c && 0 < c.length;
  }
  function Ya(a) {
    a.prototype.on = function (a, c) {
      v(this, a, c);
    };
    a.prototype.off = function (a, c) {
      ka(this, a, c);
    };
  }
  function bb() {
    this.id = null;
  }
  function ye(a, b, c) {
    for (var d = 0, e = 0; ; ) {
      var f = a.indexOf('\t', d);
      -1 == f && (f = a.length);
      var g = f - d;
      if (f == a.length || e + g >= b) return d + Math.min(g, b - e);
      e += f - d;
      e += c - (e % c);
      d = f + 1;
      if (e >= b) return d;
    }
  }
  function Ne(a) {
    for (; vc.length <= a; ) vc.push(A(vc) + ' ');
    return vc[a];
  }
  function A(a) {
    return a[a.length - 1];
  }
  function D(a, b) {
    for (var c = 0; c < a.length; ++c) if (a[c] == b) return c;
    return -1;
  }
  function ob(a, b) {
    for (var c = [], d = 0; d < a.length; d++) c[d] = b(a[d], d);
    return c;
  }
  function Eb() {}
  function ff(a, b) {
    var c;
    Object.create
      ? (c = Object.create(a))
      : ((Eb.prototype = a), (c = new Eb()));
    b && V(b, c);
    return c;
  }
  function V(a, b, c) {
    b || (b = {});
    for (var d in a)
      !a.hasOwnProperty(d) ||
        (!1 === c && b.hasOwnProperty(d)) ||
        (b[d] = a[d]);
    return b;
  }
  function cb(a) {
    var b = Array.prototype.slice.call(arguments, 1);
    return function () {
      return a.apply(null, b);
    };
  }
  function oc(a, b) {
    return b ? (-1 < b.source.indexOf('\\w') && gf(a) ? !0 : b.test(a)) : gf(a);
  }
  function hf(a) {
    for (var b in a) if (a.hasOwnProperty(b) && a[b]) return !1;
    return !0;
  }
  function tb(a) {
    return 768 <= a.charCodeAt(0) && ig.test(a);
  }
  function t(a, b, c, d) {
    a = document.createElement(a);
    c && (a.className = c);
    d && (a.style.cssText = d);
    if ('string' == typeof b) a.appendChild(document.createTextNode(b));
    else if (b) for (c = 0; c < b.length; ++c) a.appendChild(b[c]);
    return a;
  }
  function za(a) {
    for (var b = a.childNodes.length; 0 < b; --b) a.removeChild(a.firstChild);
    return a;
  }
  function U(a, b) {
    return za(a).appendChild(b);
  }
  function fa() {
    return document.activeElement;
  }
  function Fb(a) {
    return new RegExp('(^|\\s)' + a + '(?:$|\\s)\\s*');
  }
  function wd(a, b) {
    for (var c = a.split(' '), d = 0; d < c.length; d++)
      c[d] && !Fb(c[d]).test(b) && (b += ' ' + c[d]);
    return b;
  }
  function jf(a) {
    if (document.body.getElementsByClassName)
      for (
        var b = document.body.getElementsByClassName('CodeMirror'), c = 0;
        c < b.length;
        c++
      ) {
        var d = b[c].CodeMirror;
        d && a(d);
      }
  }
  function tf() {
    var a;
    v(window, 'resize', function () {
      null == a &&
        (a = setTimeout(function () {
          a = null;
          jf(If);
        }, 100));
    });
    v(window, 'blur', function () {
      jf(db);
    });
  }
  function eg(a) {
    if (null == yd) {
      var b = t('span', '​');
      U(a, t('span', [b, document.createTextNode('x')]));
      0 != a.firstChild.offsetHeight &&
        (yd = 1 >= b.offsetWidth && 2 < b.offsetHeight && !(B && 8 > C));
    }
    a = yd
      ? t('span', '​')
      : t(
          'span',
          ' ',
          null,
          'display: inline-block; width: 1px; margin-right: -1px'
        );
    a.setAttribute('cm-text', '');
    return a;
  }
  function Af(a, b, c, d) {
    if (!a) return d(b, c, 'ltr');
    for (var e = !1, f = 0; f < a.length; ++f) {
      var g = a[f];
      if ((g.from < c && g.to > b) || (b == c && g.to == b))
        d(Math.max(g.from, b), Math.min(g.to, c), 1 == g.level ? 'rtl' : 'ltr'),
          (e = !0);
    }
    e || d(b, c, 'ltr');
  }
  function dd(a) {
    return a.level % 2 ? a.to : a.from;
  }
  function ed(a) {
    return a.level % 2 ? a.from : a.to;
  }
  function ac(a) {
    return (a = Y(a)) ? dd(a[0]) : 0;
  }
  function bc(a) {
    var b = Y(a);
    return b ? ed(A(b)) : a.text.length;
  }
  function kf(a, b) {
    var c = u(a.doc, b),
      d = ia(c);
    d != c && (b = F(d));
    d = (c = Y(d)) ? (c[0].level % 2 ? bc(d) : ac(d)) : 0;
    return r(b, d);
  }
  function lf(a, b) {
    var c = kf(a, b.line),
      d = u(a.doc, c.line),
      e = Y(d);
    return e && 0 != e[0].level
      ? c
      : ((d = Math.max(0, d.text.search(/\S/))),
        r(c.line, b.line == c.line && b.ch <= d && b.ch ? 0 : d));
  }
  function Sb(a, b) {
    vb = null;
    for (var c = 0, d; c < a.length; ++c) {
      var e = a[c];
      if (e.from < b && e.to > b) return c;
      if (e.from == b || e.to == b)
        if (null == d) d = c;
        else {
          var f;
          f = e.level;
          var g = a[d].level,
            h = a[0].level;
          f = f == h ? !0 : g == h ? !1 : f < g;
          if (f) return e.from != e.to && (vb = d), c;
          e.from != e.to && (vb = c);
          break;
        }
    }
    return d;
  }
  function zd(a, b, c, d) {
    if (!d) return b + c;
    do b += c;
    while (0 < b && tb(a.text.charAt(b)));
    return b;
  }
  function gd(a, b, c, d) {
    var e = Y(a);
    if (!e) return Oe(a, b, c, d);
    var f = Sb(e, b),
      g = e[f];
    for (b = zd(a, b, g.level % 2 ? -c : c, d); ; ) {
      if (b > g.from && b < g.to) return b;
      if (b == g.from || b == g.to) {
        if (Sb(e, b) == f) return b;
        g = e[f + c];
        return 0 < c == g.level % 2 ? g.to : g.from;
      }
      g = e[(f += c)];
      if (!g) return null;
      b = 0 < c == g.level % 2 ? zd(a, g.to, -1, d) : zd(a, g.from, 1, d);
    }
  }
  function Oe(a, b, c, d) {
    b += c;
    if (d) for (; 0 < b && tb(a.text.charAt(b)); ) b += c;
    return 0 > b || b > a.text.length ? null : b;
  }
  var wa = /gecko\/\d/i.test(navigator.userAgent),
    mf = /MSIE \d/.test(navigator.userAgent),
    nf = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),
    B = mf || nf,
    C = B && (mf ? document.documentMode || 6 : nf[1]),
    J = /WebKit\//.test(navigator.userAgent),
    jg = J && /Qt\/\d+\.\d+/.test(navigator.userAgent),
    kg = /Chrome\//.test(navigator.userAgent),
    ba = /Opera\//.test(navigator.userAgent),
    te = /Apple Computer/.test(navigator.vendor),
    lg = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),
    Gf = /PhantomJS/.test(navigator.userAgent),
    Qa =
      /AppleWebKit/.test(navigator.userAgent) &&
      /Mobile\/\w+/.test(navigator.userAgent),
    ab =
      Qa ||
      /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(
        navigator.userAgent
      ),
    W = Qa || /Mac/.test(navigator.platform),
    mg = /win/i.test(navigator.platform),
    Ia = ba && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
  Ia && (Ia = Number(Ia[1]));
  Ia && 15 <= Ia && ((ba = !1), (J = !0));
  var of = W && (jg || (ba && (null == Ia || 12.11 > Ia))),
    id = wa || (B && 9 <= C),
    Ge = !1,
    ra = !1;
  Fc.prototype = V(
    {
      update: function (a) {
        var b = a.scrollWidth > a.clientWidth + 1,
          c = a.scrollHeight > a.clientHeight + 1,
          d = a.nativeBarWidth;
        c
          ? ((this.vert.style.display = 'block'),
            (this.vert.style.bottom = b ? d + 'px' : '0'),
            (this.vert.firstChild.style.height =
              Math.max(
                0,
                a.scrollHeight - a.clientHeight + (a.viewHeight - (b ? d : 0))
              ) + 'px'))
          : ((this.vert.style.display = ''),
            (this.vert.firstChild.style.height = '0'));
        b
          ? ((this.horiz.style.display = 'block'),
            (this.horiz.style.right = c ? d + 'px' : '0'),
            (this.horiz.style.left = a.barLeft + 'px'),
            (this.horiz.firstChild.style.width =
              a.scrollWidth -
              a.clientWidth +
              (a.viewWidth - a.barLeft - (c ? d : 0)) +
              'px'))
          : ((this.horiz.style.display = ''),
            (this.horiz.firstChild.style.width = '0'));
        !this.checkedOverlay &&
          0 < a.clientHeight &&
          (0 == d && this.overlayHack(), (this.checkedOverlay = !0));
        return { right: c ? d : 0, bottom: b ? d : 0 };
      },
      setScrollLeft: function (a) {
        this.horiz.scrollLeft != a && (this.horiz.scrollLeft = a);
      },
      setScrollTop: function (a) {
        this.vert.scrollTop != a && (this.vert.scrollTop = a);
      },
      overlayHack: function () {
        this.horiz.style.minHeight = this.vert.style.minWidth =
          W && !lg ? '12px' : '18px';
        var a = this,
          b = function (b) {
            (b.target || b.srcElement) != a.vert &&
              (b.target || b.srcElement) != a.horiz &&
              G(a.cm, pe)(b);
          };
        v(this.vert, 'mousedown', b);
        v(this.horiz, 'mousedown', b);
      },
      clear: function () {
        var a = this.horiz.parentNode;
        a.removeChild(this.horiz);
        a.removeChild(this.vert);
      },
    },
    Fc.prototype
  );
  Gc.prototype = V(
    {
      update: function () {
        return { bottom: 0, right: 0 };
      },
      setScrollLeft: function () {},
      setScrollTop: function () {},
      clear: function () {},
    },
    Gc.prototype
  );
  q.scrollbarModel = { 'native': Fc, 'null': Gc };
  Mb.prototype.signal = function (a, b) {
    S(a, b) && this.events.push(arguments);
  };
  Mb.prototype.finish = function () {
    for (var a = 0; a < this.events.length; a++) K.apply(null, this.events[a]);
  };
  var r = (q.Pos = function (a, b) {
      if (!(this instanceof r)) return new r(a, b);
      this.line = a;
      this.ch = b;
    }),
    y = (q.cmpPos = function (a, b) {
      return a.line - b.line || a.ch - b.ch;
    }),
    X = null;
  Tc.prototype = V(
    {
      init: function (a) {
        function b(a) {
          if (d.somethingSelected())
            (X = d.getSelections()),
              c.inaccurateSelection &&
                ((c.prevInput = ''),
                (c.inaccurateSelection = !1),
                (f.value = X.join('\n')),
                Za(f));
          else if (d.options.lineWiseCopyCut) {
            var b = Vd(d);
            X = b.text;
            'cut' == a.type
              ? d.setSelections(b.ranges, null, ha)
              : ((c.prevInput = ''), (f.value = b.text.join('\n')), Za(f));
          } else return;
          'cut' == a.type && (d.state.cutIncoming = !0);
        }
        var c = this,
          d = this.cm,
          e = (this.wrapper = Xd()),
          f = (this.textarea = e.firstChild);
        a.wrapper.insertBefore(e, a.wrapper.firstChild);
        Qa && (f.style.width = '0px');
        v(f, 'input', function () {
          B && 9 <= C && c.hasSelection && (c.hasSelection = null);
          c.poll();
        });
        v(f, 'paste', function () {
          if (
            J &&
            !d.state.fakedLastChar &&
            !(200 > new Date() - d.state.lastMiddleDown)
          ) {
            var a = f.selectionStart,
              b = f.selectionEnd;
            f.value += '$';
            f.selectionEnd = b;
            f.selectionStart = a;
            d.state.fakedLastChar = !0;
          }
          d.state.pasteIncoming = !0;
          c.fastPoll();
        });
        v(f, 'cut', b);
        v(f, 'copy', b);
        v(a.scroller, 'paste', function (b) {
          oa(a, b) || ((d.state.pasteIncoming = !0), c.focus());
        });
        v(a.lineSpace, 'selectstart', function (b) {
          oa(a, b) || O(b);
        });
        v(f, 'compositionstart', function () {
          var a = d.getCursor('from');
          c.composing = {
            start: a,
            range: d.markText(a, d.getCursor('to'), {
              className: 'CodeMirror-composing',
            }),
          };
        });
        v(f, 'compositionend', function () {
          c.composing &&
            (c.poll(), c.composing.range.clear(), (c.composing = null));
        });
      },
      prepareSelection: function () {
        var a = this.cm,
          b = a.display,
          c = a.doc,
          d = he(a);
        if (a.options.moveInputWithCursor) {
          var a = ma(a, c.sel.primary().head, 'div'),
            c = b.wrapper.getBoundingClientRect(),
            e = b.lineDiv.getBoundingClientRect();
          d.teTop = Math.max(
            0,
            Math.min(b.wrapper.clientHeight - 10, a.top + e.top - c.top)
          );
          d.teLeft = Math.max(
            0,
            Math.min(b.wrapper.clientWidth - 10, a.left + e.left - c.left)
          );
        }
        return d;
      },
      showSelection: function (a) {
        var b = this.cm.display;
        U(b.cursorDiv, a.cursors);
        U(b.selectionDiv, a.selection);
        null != a.teTop &&
          ((this.wrapper.style.top = a.teTop + 'px'),
          (this.wrapper.style.left = a.teLeft + 'px'));
      },
      reset: function (a) {
        if (!this.contextMenuPending) {
          var b,
            c,
            d = this.cm,
            e = d.doc;
          d.somethingSelected()
            ? ((this.prevInput = ''),
              (b = e.sel.primary()),
              (c = (b =
                Ce &&
                (100 < b.to().line - b.from().line ||
                  1e3 < (c = d.getSelection()).length))
                ? '-'
                : c || d.getSelection()),
              (this.textarea.value = c),
              d.state.focused && Za(this.textarea),
              B && 9 <= C && (this.hasSelection = c))
            : a ||
              ((this.prevInput = this.textarea.value = ''),
              B && 9 <= C && (this.hasSelection = null));
          this.inaccurateSelection = b;
        }
      },
      getField: function () {
        return this.textarea;
      },
      supportsTouch: function () {
        return !1;
      },
      focus: function () {
        if (
          'nocursor' != this.cm.options.readOnly &&
          (!ab || fa() != this.textarea)
        )
          try {
            this.textarea.focus();
          } catch (a) {}
      },
      blur: function () {
        this.textarea.blur();
      },
      resetPosition: function () {
        this.wrapper.style.top = this.wrapper.style.left = 0;
      },
      receivedFocus: function () {
        this.slowPoll();
      },
      slowPoll: function () {
        var a = this;
        a.pollingFast ||
          a.polling.set(this.cm.options.pollInterval, function () {
            a.poll();
            a.cm.state.focused && a.slowPoll();
          });
      },
      fastPoll: function () {
        function a() {
          c.poll() || b
            ? ((c.pollingFast = !1), c.slowPoll())
            : ((b = !0), c.polling.set(60, a));
        }
        var b = !1,
          c = this;
        c.pollingFast = !0;
        c.polling.set(20, a);
      },
      poll: function () {
        var a = this.cm,
          b = this.textarea,
          c = this.prevInput;
        if (
          !a.state.focused ||
          (ng(b) && !c) ||
          Rb(a) ||
          a.options.disableInput ||
          a.state.keySeq
        )
          return !1;
        a.state.pasteIncoming &&
          a.state.fakedLastChar &&
          ((b.value = b.value.substring(0, b.value.length - 1)),
          (a.state.fakedLastChar = !1));
        var d = b.value;
        if (d == c && !a.somethingSelected()) return !1;
        if (
          (B && 9 <= C && this.hasSelection === d) ||
          (W && /[\uf700-\uf7ff]/.test(d))
        )
          return a.display.input.reset(), !1;
        if (a.doc.sel == a.display.selForContextMenu) {
          var e = d.charCodeAt(0);
          8203 != e || c || (c = '​');
          if (8666 == e) return this.reset(), this.cm.execCommand('undo');
        }
        for (
          var f = 0, e = Math.min(c.length, d.length);
          f < e && c.charCodeAt(f) == d.charCodeAt(f);

        )
          ++f;
        var g = this;
        T(a, function () {
          Sc(
            a,
            d.slice(f),
            c.length - f,
            null,
            g.composing ? '*compose' : null
          );
          1e3 < d.length || -1 < d.indexOf('\n')
            ? (b.value = g.prevInput = '')
            : (g.prevInput = d);
          g.composing &&
            (g.composing.range.clear(),
            (g.composing.range = a.markText(
              g.composing.start,
              a.getCursor('to'),
              { className: 'CodeMirror-composing' }
            )));
        });
        return !0;
      },
      ensurePolled: function () {
        this.pollingFast && this.poll() && (this.pollingFast = !1);
      },
      onKeyPress: function () {
        B && 9 <= C && (this.hasSelection = null);
        this.fastPoll();
      },
      onContextMenu: function (a) {
        function b() {
          if (null != g.selectionStart) {
            var a = e.somethingSelected(),
              b = '​' + (a ? g.value : '');
            g.value = '⇚';
            g.value = b;
            d.prevInput = a ? '' : '​';
            g.selectionStart = 1;
            g.selectionEnd = b.length;
            f.selForContextMenu = e.doc.sel;
          }
        }
        function c() {
          d.contextMenuPending = !1;
          d.wrapper.style.position = 'relative';
          g.style.cssText = l;
          B && 9 > C && f.scrollbars.setScrollTop((f.scroller.scrollTop = k));
          if (null != g.selectionStart) {
            (!B || (B && 9 > C)) && b();
            var a = 0,
              c = function () {
                f.selForContextMenu == e.doc.sel &&
                0 == g.selectionStart &&
                0 < g.selectionEnd &&
                '​' == d.prevInput
                  ? G(e, ic.selectAll)(e)
                  : 10 > a++
                  ? (f.detectingSelectAll = setTimeout(c, 500))
                  : f.input.reset();
              };
            f.detectingSelectAll = setTimeout(c, 200);
          }
        }
        var d = this,
          e = d.cm,
          f = e.display,
          g = d.textarea,
          h = Ua(e, a),
          k = f.scroller.scrollTop;
        if (h && !ba) {
          e.options.resetSelectionOnContextMenu &&
            -1 == e.doc.sel.contains(h) &&
            G(e, H)(e.doc, ga(h), ha);
          var l = g.style.cssText;
          d.wrapper.style.position = 'absolute';
          g.style.cssText =
            'position: fixed; width: 30px; height: 30px; top: ' +
            (a.clientY - 5) +
            'px; left: ' +
            (a.clientX - 5) +
            'px; z-index: 1000; background: ' +
            (B ? 'rgba(255, 255, 255, .05)' : 'transparent') +
            '; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity\x3d5);';
          if (J) var m = window.scrollY;
          f.input.focus();
          J && window.scrollTo(null, m);
          f.input.reset();
          e.somethingSelected() || (g.value = d.prevInput = ' ');
          d.contextMenuPending = !0;
          f.selForContextMenu = e.doc.sel;
          clearTimeout(f.detectingSelectAll);
          B && 9 <= C && b();
          if (id) {
            jd(a);
            var p = function () {
              ka(window, 'mouseup', p);
              setTimeout(c, 20);
            };
            v(window, 'mouseup', p);
          } else setTimeout(c, 50);
        }
      },
      setUneditable: Eb,
      needsContentAttribute: !1,
    },
    Tc.prototype
  );
  Uc.prototype = V(
    {
      init: function (a) {
        function b(a) {
          if (d.somethingSelected())
            (X = d.getSelections()),
              'cut' == a.type && d.replaceSelection('', null, 'cut');
          else if (d.options.lineWiseCopyCut) {
            var b = Vd(d);
            X = b.text;
            'cut' == a.type &&
              d.operation(function () {
                d.setSelections(b.ranges, 0, ha);
                d.replaceSelection('', null, 'cut');
              });
          } else return;
          if (a.clipboardData && !Qa)
            a.preventDefault(),
              a.clipboardData.clearData(),
              a.clipboardData.setData('text/plain', X.join('\n'));
          else {
            var c = Xd();
            a = c.firstChild;
            d.display.lineSpace.insertBefore(c, d.display.lineSpace.firstChild);
            a.value = X.join('\n');
            var h = document.activeElement;
            Za(a);
            setTimeout(function () {
              d.display.lineSpace.removeChild(c);
              h.focus();
            }, 50);
          }
        }
        var c = this,
          d = c.cm;
        a = c.div = a.lineDiv;
        a.contentEditable = 'true';
        Wd(a);
        v(a, 'paste', function (a) {
          var b = a.clipboardData && a.clipboardData.getData('text/plain');
          b && (a.preventDefault(), d.replaceSelection(b, null, 'paste'));
        });
        v(a, 'compositionstart', function (a) {
          a = a.data;
          c.composing = { sel: d.doc.sel, data: a, startData: a };
          if (a) {
            var b = d.doc.sel.primary(),
              g = d
                .getLine(b.head.line)
                .indexOf(a, Math.max(0, b.head.ch - a.length));
            -1 < g &&
              g <= b.head.ch &&
              (c.composing.sel = ga(
                r(b.head.line, g),
                r(b.head.line, g + a.length)
              ));
          }
        });
        v(a, 'compositionupdate', function (a) {
          c.composing.data = a.data;
        });
        v(a, 'compositionend', function (a) {
          var b = c.composing;
          b &&
            (a.data == b.startData ||
              /\u200b/.test(a.data) ||
              (b.data = a.data),
            setTimeout(function () {
              b.handled || c.applyComposition(b);
              c.composing == b && (c.composing = null);
            }, 50));
        });
        v(a, 'touchstart', function () {
          c.forceCompositionEnd();
        });
        v(a, 'input', function () {
          c.composing ||
            c.pollContent() ||
            T(c.cm, function () {
              Q(d);
            });
        });
        v(a, 'copy', b);
        v(a, 'cut', b);
      },
      prepareSelection: function () {
        var a = he(this.cm, !1);
        a.focus = this.cm.state.focused;
        return a;
      },
      showSelection: function (a) {
        a &&
          this.cm.display.view.length &&
          (a.focus && this.showPrimarySelection(),
          this.showMultipleSelections(a));
      },
      showPrimarySelection: function () {
        var a = window.getSelection(),
          b = this.cm.doc.sel.primary(),
          c = Tb(this.cm, a.anchorNode, a.anchorOffset),
          d = Tb(this.cm, a.focusNode, a.focusOffset);
        if (
          !c ||
          c.bad ||
          !d ||
          d.bad ||
          0 != y(Qb(c, d), b.from()) ||
          0 != y(Pb(c, d), b.to())
        )
          if (
            ((c = Yd(this.cm, b.from())), (d = Yd(this.cm, b.to())), c || d)
          ) {
            var e = this.cm.display.view,
              b = a.rangeCount && a.getRangeAt(0);
            c
              ? d ||
                ((d = e[e.length - 1].measure),
                (d = d.maps ? d.maps[d.maps.length - 1] : d.map),
                (d = {
                  node: d[d.length - 1],
                  offset: d[d.length - 2] - d[d.length - 3],
                }))
              : (c = { node: e[0].measure.map[2], offset: 0 });
            try {
              var f = Ea(c.node, c.offset, d.offset, d.node);
            } catch (g) {}
            f &&
              (a.removeAllRanges(),
              a.addRange(f),
              b && null == a.anchorNode
                ? a.addRange(b)
                : wa && this.startGracePeriod());
            this.rememberSelection();
          }
      },
      startGracePeriod: function () {
        var a = this;
        clearTimeout(this.gracePeriod);
        this.gracePeriod = setTimeout(function () {
          a.gracePeriod = !1;
          a.selectionChanged() &&
            a.cm.operation(function () {
              a.cm.curOp.selectionChanged = !0;
            });
        }, 20);
      },
      showMultipleSelections: function (a) {
        U(this.cm.display.cursorDiv, a.cursors);
        U(this.cm.display.selectionDiv, a.selection);
      },
      rememberSelection: function () {
        var a = window.getSelection();
        this.lastAnchorNode = a.anchorNode;
        this.lastAnchorOffset = a.anchorOffset;
        this.lastFocusNode = a.focusNode;
        this.lastFocusOffset = a.focusOffset;
      },
      selectionInEditor: function () {
        var a = window.getSelection();
        if (!a.rangeCount) return !1;
        a = a.getRangeAt(0).commonAncestorContainer;
        return Wc(this.div, a);
      },
      focus: function () {
        'nocursor' != this.cm.options.readOnly && this.div.focus();
      },
      blur: function () {
        this.div.blur();
      },
      getField: function () {
        return this.div;
      },
      supportsTouch: function () {
        return !0;
      },
      receivedFocus: function () {
        function a() {
          b.cm.state.focused &&
            (b.pollSelection(), b.polling.set(b.cm.options.pollInterval, a));
        }
        var b = this;
        this.selectionInEditor()
          ? this.pollSelection()
          : T(this.cm, function () {
              b.cm.curOp.selectionChanged = !0;
            });
        this.polling.set(this.cm.options.pollInterval, a);
      },
      selectionChanged: function () {
        var a = window.getSelection();
        return (
          a.anchorNode != this.lastAnchorNode ||
          a.anchorOffset != this.lastAnchorOffset ||
          a.focusNode != this.lastFocusNode ||
          a.focusOffset != this.lastFocusOffset
        );
      },
      pollSelection: function () {
        if (!this.composing && !this.gracePeriod && this.selectionChanged()) {
          var a = window.getSelection(),
            b = this.cm;
          this.rememberSelection();
          var c = Tb(b, a.anchorNode, a.anchorOffset),
            d = Tb(b, a.focusNode, a.focusOffset);
          c &&
            d &&
            T(b, function () {
              H(b.doc, ga(c, d), ha);
              if (c.bad || d.bad) b.curOp.selectionChanged = !0;
            });
        }
      },
      pollContent: function () {
        var a = this.cm,
          b = a.display,
          c = a.doc.sel.primary(),
          d = c.from(),
          c = c.to();
        if (d.line < b.viewFrom || c.line > b.viewTo - 1) return !1;
        var e;
        d.line == b.viewFrom || 0 == (e = Ca(a, d.line))
          ? ((d = F(b.view[0].line)), (e = b.view[0].node))
          : ((d = F(b.view[e].line)), (e = b.view[e - 1].node.nextSibling));
        var f = Ca(a, c.line);
        f == b.view.length - 1
          ? ((c = b.viewTo - 1), (b = b.view[f].node))
          : ((c = F(b.view[f + 1].line) - 1),
            (b = b.view[f + 1].node.previousSibling));
        b = sa(xf(a, e, b, d, c));
        for (
          e = Da(a.doc, r(d, 0), r(c, u(a.doc, c).text.length));
          1 < b.length && 1 < e.length;

        )
          if (A(b) == A(e)) b.pop(), e.pop(), c--;
          else if (b[0] == e[0]) b.shift(), e.shift(), d++;
          else break;
        for (
          var g = 0,
            f = 0,
            h = b[0],
            k = e[0],
            l = Math.min(h.length, k.length);
          g < l && h.charCodeAt(g) == k.charCodeAt(g);

        )
          ++g;
        h = A(b);
        k = A(e);
        for (
          l = Math.min(
            h.length - (1 == b.length ? g : 0),
            k.length - (1 == e.length ? g : 0)
          );
          f < l &&
          h.charCodeAt(h.length - f - 1) == k.charCodeAt(k.length - f - 1);

        )
          ++f;
        b[b.length - 1] = h.slice(0, h.length - f);
        b[0] = b[0].slice(g);
        d = r(d, g);
        c = r(c, e.length ? A(e).length - f : 0);
        if (1 < b.length || b[0] || y(d, c))
          return wb(a.doc, b, d, c, '+input'), !0;
      },
      ensurePolled: function () {
        this.forceCompositionEnd();
      },
      reset: function () {
        this.forceCompositionEnd();
      },
      forceCompositionEnd: function () {
        this.composing &&
          !this.composing.handled &&
          (this.applyComposition(this.composing),
          (this.composing.handled = !0),
          this.div.blur(),
          this.div.focus());
      },
      applyComposition: function (a) {
        a.data &&
          a.data != a.startData &&
          G(this.cm, Sc)(this.cm, a.data, 0, a.sel);
      },
      setUneditable: function (a) {
        a.setAttribute('contenteditable', 'false');
      },
      onKeyPress: function (a) {
        a.preventDefault();
        G(this.cm, Sc)(
          this.cm,
          String.fromCharCode(null == a.charCode ? a.keyCode : a.charCode),
          0
        );
      },
      onContextMenu: Eb,
      resetPosition: Eb,
      needsContentAttribute: !0,
    },
    Uc.prototype
  );
  q.inputStyles = { textarea: Tc, contenteditable: Uc };
  la.prototype = {
    primary: function () {
      return this.ranges[this.primIndex];
    },
    equals: function (a) {
      if (a == this) return !0;
      if (
        a.primIndex != this.primIndex ||
        a.ranges.length != this.ranges.length
      )
        return !1;
      for (var b = 0; b < this.ranges.length; b++) {
        var c = this.ranges[b],
          d = a.ranges[b];
        if (0 != y(c.anchor, d.anchor) || 0 != y(c.head, d.head)) return !1;
      }
      return !0;
    },
    deepCopy: function () {
      for (var a = [], b = 0; b < this.ranges.length; b++)
        a[b] = new z(Rc(this.ranges[b].anchor), Rc(this.ranges[b].head));
      return new la(a, this.primIndex);
    },
    somethingSelected: function () {
      for (var a = 0; a < this.ranges.length; a++)
        if (!this.ranges[a].empty()) return !0;
      return !1;
    },
    contains: function (a, b) {
      b || (b = a);
      for (var c = 0; c < this.ranges.length; c++) {
        var d = this.ranges[c];
        if (0 <= y(b, d.from()) && 0 >= y(a, d.to())) return c;
      }
      return -1;
    },
  };
  z.prototype = {
    from: function () {
      return Qb(this.anchor, this.head);
    },
    to: function () {
      return Pb(this.anchor, this.head);
    },
    empty: function () {
      return (
        this.head.line == this.anchor.line && this.head.ch == this.anchor.ch
      );
    },
  };
  var ad = { left: 0, right: 0, top: 0, bottom: 0 },
    Fa,
    Ta = null,
    Ff = 0,
    fc,
    ec,
    se = 0,
    gc = 0,
    R = null;
  B ? (R = -0.53) : wa ? (R = 15) : kg ? (R = -0.7) : te && (R = -1 / 3);
  var ze = function (a) {
    var b = a.wheelDeltaX,
      c = a.wheelDeltaY;
    null == b && a.detail && a.axis == a.HORIZONTAL_AXIS && (b = a.detail);
    null == c && a.detail && a.axis == a.VERTICAL_AXIS
      ? (c = a.detail)
      : null == c && (c = a.wheelDelta);
    return { x: b, y: c };
  };
  q.wheelEventPixels = function (a) {
    a = ze(a);
    a.x *= R;
    a.y *= R;
    return a;
  };
  var Qf = new bb(),
    md = null,
    ta = (q.changeEnd = function (a) {
      return a.text
        ? r(
            a.from.line + a.text.length - 1,
            A(a.text).length + (1 == a.text.length ? a.from.ch : 0)
          )
        : a.to;
    });
  q.prototype = {
    constructor: q,
    focus: function () {
      window.focus();
      this.display.input.focus();
    },
    setOption: function (a, b) {
      var c = this.options,
        d = c[a];
      if (c[a] != b || 'mode' == a)
        (c[a] = b), Ka.hasOwnProperty(a) && G(this, Ka[a])(this, b, d);
    },
    getOption: function (a) {
      return this.options[a];
    },
    getDoc: function () {
      return this.doc;
    },
    addKeyMap: function (a, b) {
      this.state.keyMaps[b ? 'push' : 'unshift'](pc(a));
    },
    removeKeyMap: function (a) {
      for (var b = this.state.keyMaps, c = 0; c < b.length; ++c)
        if (b[c] == a || b[c].name == a) return b.splice(c, 1), !0;
    },
    addOverlay: M(function (a, b) {
      var c = a.token ? a : q.getMode(this.options, a);
      if (c.startState) throw Error('Overlays may not be stateful.');
      this.state.overlays.push({ mode: c, modeSpec: a, opaque: b && b.opaque });
      this.state.modeGen++;
      Q(this);
    }),
    removeOverlay: M(function (a) {
      for (var b = this.state.overlays, c = 0; c < b.length; ++c) {
        var d = b[c].modeSpec;
        if (d == a || ('string' == typeof a && d.name == a)) {
          b.splice(c, 1);
          this.state.modeGen++;
          Q(this);
          break;
        }
      }
    }),
    indentLine: M(function (a, b, c) {
      'string' != typeof b &&
        'number' != typeof b &&
        (b =
          null == b
            ? this.options.smartIndent
              ? 'smart'
              : 'prev'
            : b
            ? 'add'
            : 'subtract');
      qb(this.doc, a) && pb(this, a, b, c);
    }),
    indentSelection: M(function (a) {
      for (var b = this.doc.sel.ranges, c = -1, d = 0; d < b.length; d++) {
        var e = b[d];
        if (e.empty())
          e.head.line > c &&
            (pb(this, e.head.line, a, !0),
            (c = e.head.line),
            d == this.doc.sel.primIndex && Pa(this));
        else {
          for (
            var f = e.from(),
              e = e.to(),
              g = Math.max(c, f.line),
              c = Math.min(this.lastLine(), e.line - (e.ch ? 0 : 1)) + 1,
              e = g;
            e < c;
            ++e
          )
            pb(this, e, a);
          e = this.doc.sel.ranges;
          0 == f.ch &&
            b.length == e.length &&
            0 < e[d].from().ch &&
            Xc(this.doc, d, new z(f, e[d].to()), ha);
        }
      }
    }),
    getTokenAt: function (a, b) {
      return Ye(this, a, b);
    },
    getLineTokens: function (a, b) {
      return Ye(this, r(a), b, !0);
    },
    getTokenTypeAt: function (a) {
      a = w(this.doc, a);
      var b = $e(this, u(this.doc, a.line)),
        c = 0,
        d = (b.length - 1) / 2;
      a = a.ch;
      if (0 == a) b = b[2];
      else
        for (;;) {
          var e = (c + d) >> 1;
          if ((e ? b[2 * e - 1] : 0) >= a) d = e;
          else if (b[2 * e + 1] < a) c = e + 1;
          else {
            b = b[2 * e + 2];
            break;
          }
        }
      c = b ? b.indexOf('cm-overlay ') : -1;
      return 0 > c ? b : 0 == c ? null : b.slice(0, c - 1);
    },
    getModeAt: function (a) {
      var b = this.doc.mode;
      return b.innerMode ? q.innerMode(b, this.getTokenAt(a).state).mode : b;
    },
    getHelper: function (a, b) {
      return this.getHelpers(a, b)[0];
    },
    getHelpers: function (a, b) {
      var c = [];
      if (!$a.hasOwnProperty(b)) return c;
      var d = $a[b],
        e = this.getModeAt(a);
      if ('string' == typeof e[b]) d[e[b]] && c.push(d[e[b]]);
      else if (e[b])
        for (var f = 0; f < e[b].length; f++) {
          var g = d[e[b][f]];
          g && c.push(g);
        }
      else
        e.helperType && d[e.helperType]
          ? c.push(d[e.helperType])
          : d[e.name] && c.push(d[e.name]);
      for (f = 0; f < d._global.length; f++)
        (g = d._global[f]),
          g.pred(e, this) && -1 == D(c, g.val) && c.push(g.val);
      return c;
    },
    getStateAfter: function (a, b) {
      var c = this.doc;
      a = Math.max(
        c.first,
        Math.min(null == a ? c.first + c.size - 1 : a, c.first + c.size - 1)
      );
      return sb(this, a + 1, b);
    },
    cursorCoords: function (a, b) {
      var c;
      c = this.doc.sel.primary();
      c =
        null == a
          ? c.head
          : 'object' == typeof a
          ? w(this.doc, a)
          : a
          ? c.from()
          : c.to();
      return ma(this, c, b || 'page');
    },
    charCoords: function (a, b) {
      return Yb(this, w(this.doc, a), b || 'page');
    },
    coordsChar: function (a, b) {
      a = ne(this, a, b || 'page');
      return fd(this, a.left, a.top);
    },
    lineAtHeight: function (a, b) {
      a = ne(this, { top: a, left: 0 }, b || 'page').top;
      return Ba(this.doc, a + this.display.viewOffset);
    },
    heightAtLine: function (a, b) {
      var c = !1,
        d;
      'number' == typeof a
        ? ((d = this.doc.first + this.doc.size - 1),
          a < this.doc.first
            ? (a = this.doc.first)
            : a > d && ((a = d), (c = !0)),
          (d = u(this.doc, a)))
        : (d = a);
      return (
        cd(this, d, { top: 0, left: 0 }, b || 'page').top +
        (c ? this.doc.height - ea(d) : 0)
      );
    },
    defaultTextHeight: function () {
      return xa(this.display);
    },
    defaultCharWidth: function () {
      return gb(this.display);
    },
    setGutterMarker: M(function (a, b, c) {
      return nc(this.doc, a, 'gutter', function (a) {
        var e = a.gutterMarkers || (a.gutterMarkers = {});
        e[b] = c;
        !c && hf(e) && (a.gutterMarkers = null);
        return !0;
      });
    }),
    clearGutter: M(function (a) {
      var b = this,
        c = b.doc,
        d = c.first;
      c.iter(function (c) {
        c.gutterMarkers &&
          c.gutterMarkers[a] &&
          ((c.gutterMarkers[a] = null),
          na(b, d, 'gutter'),
          hf(c.gutterMarkers) && (c.gutterMarkers = null));
        ++d;
      });
    }),
    lineInfo: function (a) {
      if ('number' == typeof a) {
        if (!qb(this.doc, a)) return null;
        var b = a;
        a = u(this.doc, a);
        if (!a) return null;
      } else if (((b = F(a)), null == b)) return null;
      return {
        line: b,
        handle: a,
        text: a.text,
        gutterMarkers: a.gutterMarkers,
        textClass: a.textClass,
        bgClass: a.bgClass,
        wrapClass: a.wrapClass,
        widgets: a.widgets,
      };
    },
    getViewport: function () {
      return { from: this.display.viewFrom, to: this.display.viewTo };
    },
    addWidget: function (a, b, c, d, e) {
      var f = this.display;
      a = ma(this, w(this.doc, a));
      var g = a.bottom,
        h = a.left;
      b.style.position = 'absolute';
      b.setAttribute('cm-ignore-events', 'true');
      this.display.input.setUneditable(b);
      f.sizer.appendChild(b);
      if ('over' == d) g = a.top;
      else if ('above' == d || 'near' == d) {
        var k = Math.max(f.wrapper.clientHeight, this.doc.height),
          l = Math.max(f.sizer.clientWidth, f.lineSpace.clientWidth);
        ('above' == d || a.bottom + b.offsetHeight > k) &&
        a.top > b.offsetHeight
          ? (g = a.top - b.offsetHeight)
          : a.bottom + b.offsetHeight <= k && (g = a.bottom);
        h + b.offsetWidth > l && (h = l - b.offsetWidth);
      }
      b.style.top = g + 'px';
      b.style.left = b.style.right = '';
      'right' == e
        ? ((h = f.sizer.clientWidth - b.offsetWidth), (b.style.right = '0px'))
        : ('left' == e
            ? (h = 0)
            : 'middle' == e && (h = (f.sizer.clientWidth - b.offsetWidth) / 2),
          (b.style.left = h + 'px'));
      c &&
        ((a = cc(this, h, g, h + b.offsetWidth, g + b.offsetHeight)),
        null != a.scrollTop && lb(this, a.scrollTop),
        null != a.scrollLeft && Ma(this, a.scrollLeft));
    },
    triggerOnKeyDown: M(ve),
    triggerOnKeyPress: M(we),
    triggerOnKeyUp: ue,
    execCommand: function (a) {
      if (ic.hasOwnProperty(a)) return ic[a](this);
    },
    findPosH: function (a, b, c, d) {
      var e = 1;
      0 > b && ((e = -1), (b = -b));
      var f = 0;
      for (
        a = w(this.doc, a);
        f < b && ((a = rd(this.doc, a, e, c, d)), !a.hitSide);
        ++f
      );
      return a;
    },
    moveH: M(function (a, b) {
      var c = this;
      c.extendSelectionsBy(function (d) {
        return c.display.shift || c.doc.extend || d.empty()
          ? rd(c.doc, d.head, a, b, c.options.rtlMoveVisually)
          : 0 > a
          ? d.from()
          : d.to();
      }, Gb);
    }),
    deleteH: M(function (a, b) {
      var c = this.doc;
      this.doc.sel.somethingSelected()
        ? c.replaceSelection('', null, '+delete')
        : Va(this, function (d) {
            var e = rd(c, d.head, a, b, !1);
            return 0 > a ? { from: e, to: d.head } : { from: d.head, to: e };
          });
    }),
    findPosV: function (a, b, c, d) {
      var e = 1;
      0 > b && ((e = -1), (b = -b));
      var f = 0;
      for (
        a = w(this.doc, a);
        f < b &&
        ((a = ma(this, a, 'div')),
        null == d ? (d = a.left) : (a.left = d),
        (a = Pe(this, a, e, c)),
        !a.hitSide);
        ++f
      );
      return a;
    },
    moveV: M(function (a, b) {
      var c = this,
        d = this.doc,
        e = [],
        f = !c.display.shift && !d.extend && d.sel.somethingSelected();
      d.extendSelectionsBy(function (g) {
        if (f) return 0 > a ? g.from() : g.to();
        var k = ma(c, g.head, 'div');
        null != g.goalColumn && (k.left = g.goalColumn);
        e.push(k.left);
        var l = Pe(c, k, a, b);
        'page' == b &&
          g == d.sel.primary() &&
          lc(c, null, Yb(c, l, 'div').top - k.top);
        return l;
      }, Gb);
      if (e.length)
        for (var g = 0; g < d.sel.ranges.length; g++)
          d.sel.ranges[g].goalColumn = e[g];
    }),
    findWordAt: function (a) {
      var b = u(this.doc, a.line).text,
        c = a.ch,
        d = a.ch;
      if (b) {
        var e = this.getHelper(a, 'wordChars');
        (0 > a.xRel || d == b.length) && c ? --c : ++d;
        for (
          var f = b.charAt(c),
            f = oc(f, e)
              ? function (a) {
                  return oc(a, e);
                }
              : /\s/.test(f)
              ? function (a) {
                  return /\s/.test(a);
                }
              : function (a) {
                  return !/\s/.test(a) && !oc(a);
                };
          0 < c && f(b.charAt(c - 1));

        )
          --c;
        for (; d < b.length && f(b.charAt(d)); ) ++d;
      }
      return new z(r(a.line, c), r(a.line, d));
    },
    toggleOverwrite: function (a) {
      if (null == a || a != this.state.overwrite)
        (this.state.overwrite = !this.state.overwrite)
          ? mb(this.display.cursorDiv, 'CodeMirror-overwrite')
          : kb(this.display.cursorDiv, 'CodeMirror-overwrite'),
          K(this, 'overwriteToggle', this, this.state.overwrite);
    },
    hasFocus: function () {
      return this.display.input.getField() == fa();
    },
    scrollTo: M(function (a, b) {
      (null == a && null == b) || mc(this);
      null != a && (this.curOp.scrollLeft = a);
      null != b && (this.curOp.scrollTop = b);
    }),
    getScrollInfo: function () {
      var a = this.display.scroller;
      return {
        left: a.scrollLeft,
        top: a.scrollTop,
        height: a.scrollHeight - da(this) - this.display.barHeight,
        width: a.scrollWidth - da(this) - this.display.barWidth,
        clientHeight: Nc(this),
        clientWidth: pa(this),
      };
    },
    scrollIntoView: M(function (a, b) {
      null == a
        ? ((a = { from: this.doc.sel.primary().head, to: null }),
          null == b && (b = this.options.cursorScrollMargin))
        : 'number' == typeof a
        ? (a = { from: r(a, 0), to: null })
        : null == a.from && (a = { from: a, to: null });
      a.to || (a.to = a.from);
      a.margin = b || 0;
      if (null != a.from.line) mc(this), (this.curOp.scrollToPos = a);
      else {
        var c = cc(
          this,
          Math.min(a.from.left, a.to.left),
          Math.min(a.from.top, a.to.top) - a.margin,
          Math.max(a.from.right, a.to.right),
          Math.max(a.from.bottom, a.to.bottom) + a.margin
        );
        this.scrollTo(c.scrollLeft, c.scrollTop);
      }
    }),
    setSize: M(function (a, b) {
      function c(a) {
        return 'number' == typeof a || /^\d+$/.test(String(a)) ? a + 'px' : a;
      }
      var d = this;
      null != a && (d.display.wrapper.style.width = c(a));
      null != b && (d.display.wrapper.style.height = c(b));
      d.options.lineWrapping && me(this);
      var e = d.display.viewFrom;
      d.doc.iter(e, d.display.viewTo, function (a) {
        if (a.widgets)
          for (var b = 0; b < a.widgets.length; b++)
            if (a.widgets[b].noHScroll) {
              na(d, e, 'widget');
              break;
            }
        ++e;
      });
      d.curOp.forceUpdate = !0;
      K(d, 'refresh', this);
    }),
    operation: function (a) {
      return T(this, a);
    },
    refresh: M(function () {
      var a = this.display.cachedTextHeight;
      Q(this);
      this.curOp.forceUpdate = !0;
      hb(this);
      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);
      Cc(this);
      (null == a || 0.5 < Math.abs(a - xa(this.display))) && Ac(this);
      K(this, 'refresh', this);
    }),
    swapDoc: M(function (a) {
      var b = this.doc;
      b.cm = null;
      Ed(this, a);
      hb(this);
      this.display.input.reset();
      this.scrollTo(a.scrollLeft, a.scrollTop);
      this.curOp.forceScroll = !0;
      L(this, 'swapDoc', this, b);
      return b;
    }),
    getInputField: function () {
      return this.display.input.getField();
    },
    getWrapperElement: function () {
      return this.display.wrapper;
    },
    getScrollerElement: function () {
      return this.display.scroller;
    },
    getGutterElement: function () {
      return this.display.gutters;
    },
  };
  Ya(q);
  var qf = (q.defaults = {}),
    Ka = (q.optionHandlers = {}),
    Fd = (q.Init = {
      toString: function () {
        return 'CodeMirror.Init';
      },
    });
  x(
    'value',
    '',
    function (a, b) {
      a.setValue(b);
    },
    !0
  );
  x(
    'mode',
    null,
    function (a, b) {
      a.doc.modeOption = b;
      zc(a);
    },
    !0
  );
  x('indentUnit', 2, zc, !0);
  x('indentWithTabs', !1);
  x('smartIndent', !0);
  x(
    'tabSize',
    4,
    function (a) {
      eb(a);
      hb(a);
      Q(a);
    },
    !0
  );
  x(
    'specialChars',
    /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,
    function (a, b, c) {
      a.state.specialChars = new RegExp(
        b.source + (b.test('\t') ? '' : '|\t'),
        'g'
      );
      c != q.Init && a.refresh();
    }
  );
  x(
    'specialCharPlaceholder',
    function (a) {
      var b = t('span', '•', 'cm-invalidchar');
      b.title = '\\u' + a.charCodeAt(0).toString(16);
      b.setAttribute('aria-label', b.title);
      return b;
    },
    function (a) {
      a.refresh();
    },
    !0
  );
  x('electricChars', !0);
  x(
    'inputStyle',
    ab ? 'contenteditable' : 'textarea',
    function () {
      throw Error('inputStyle can not (yet) be changed in a running editor');
    },
    !0
  );
  x('rtlMoveVisually', !mg);
  x('wholeLineUpdateBefore', !0);
  x(
    'theme',
    'default',
    function (a) {
      Bd(a);
      ib(a);
    },
    !0
  );
  x('keyMap', 'default', function (a, b, c) {
    b = pc(b);
    (c = c != q.Init && pc(c)) && c.detach && c.detach(a, b);
    b.attach && b.attach(a, c || null);
  });
  x('extraKeys', null);
  x(
    'lineWrapping',
    !1,
    function (a) {
      a.options.lineWrapping
        ? (mb(a.display.wrapper, 'CodeMirror-wrap'),
          (a.display.sizer.style.minWidth = ''),
          (a.display.sizerWidth = null))
        : (kb(a.display.wrapper, 'CodeMirror-wrap'), Dc(a));
      Ac(a);
      Q(a);
      hb(a);
      setTimeout(function () {
        Na(a);
      }, 100);
    },
    !0
  );
  x(
    'gutters',
    [],
    function (a) {
      wc(a.options);
      ib(a);
    },
    !0
  );
  x(
    'fixedGutter',
    !0,
    function (a, b) {
      a.display.gutters.style.left = b ? Ic(a.display) + 'px' : '0';
      a.refresh();
    },
    !0
  );
  x(
    'coverGutterNextToScrollbar',
    !1,
    function (a) {
      Na(a);
    },
    !0
  );
  x(
    'scrollbarStyle',
    'native',
    function (a) {
      Cd(a);
      Na(a);
      a.display.scrollbars.setScrollTop(a.doc.scrollTop);
      a.display.scrollbars.setScrollLeft(a.doc.scrollLeft);
    },
    !0
  );
  x(
    'lineNumbers',
    !1,
    function (a) {
      wc(a.options);
      ib(a);
    },
    !0
  );
  x('firstLineNumber', 1, ib, !0);
  x(
    'lineNumberFormatter',
    function (a) {
      return a;
    },
    ib,
    !0
  );
  x('showCursorWhenSelecting', !1, nb, !0);
  x('resetSelectionOnContextMenu', !0);
  x('lineWiseCopyCut', !0);
  x('readOnly', !1, function (a, b) {
    'nocursor' == b
      ? (db(a), a.display.input.blur(), (a.display.disabled = !0))
      : ((a.display.disabled = !1), b || a.display.input.reset());
  });
  x(
    'disableInput',
    !1,
    function (a, b) {
      b || a.display.input.reset();
    },
    !0
  );
  x('dragDrop', !0, function (a, b, c) {
    !b != !(c && c != q.Init) &&
      ((c = a.display.dragFunctions),
      (b = b ? v : ka),
      b(a.display.scroller, 'dragstart', c.start),
      b(a.display.scroller, 'dragenter', c.simple),
      b(a.display.scroller, 'dragover', c.simple),
      b(a.display.scroller, 'drop', c.drop));
  });
  x('cursorBlinkRate', 530);
  x('cursorScrollMargin', 0);
  x('cursorHeight', 1, nb, !0);
  x('singleCursorHeightPerLine', !0, nb, !0);
  x('workTime', 100);
  x('workDelay', 100);
  x('flattenSpans', !0, eb, !0);
  x('addModeClass', !1, eb, !0);
  x('pollInterval', 100);
  x('undoDepth', 200, function (a, b) {
    a.doc.history.undoDepth = b;
  });
  x('historyEventDelay', 1250);
  x(
    'viewportMargin',
    10,
    function (a) {
      a.refresh();
    },
    !0
  );
  x('maxHighlightLength', 1e4, eb, !0);
  x('moveInputWithCursor', !0, function (a, b) {
    b || a.display.input.resetPosition();
  });
  x('tabindex', null, function (a, b) {
    a.display.input.getField().tabIndex = b || '';
  });
  x('autofocus', null);
  var pf = (q.modes = {}),
    Hb = (q.mimeModes = {});
  q.defineMode = function (a, b) {
    q.defaults.mode || 'null' == a || (q.defaults.mode = a);
    2 < arguments.length &&
      (b.dependencies = Array.prototype.slice.call(arguments, 2));
    pf[a] = b;
  };
  q.defineMIME = function (a, b) {
    Hb[a] = b;
  };
  q.resolveMode = function (a) {
    if ('string' == typeof a && Hb.hasOwnProperty(a)) a = Hb[a];
    else if (a && 'string' == typeof a.name && Hb.hasOwnProperty(a.name)) {
      var b = Hb[a.name];
      'string' == typeof b && (b = { name: b });
      a = ff(b, a);
      a.name = b.name;
    } else if ('string' == typeof a && /^[\w\-]+\/[\w\-]+\+xml$/.test(a))
      return q.resolveMode('application/xml');
    return 'string' == typeof a ? { name: a } : a || { name: 'null' };
  };
  q.getMode = function (a, b) {
    b = q.resolveMode(b);
    var c = pf[b.name];
    if (!c) return q.getMode(a, 'text/plain');
    c = c(a, b);
    if (Ib.hasOwnProperty(b.name)) {
      var d = Ib[b.name],
        e;
      for (e in d)
        d.hasOwnProperty(e) &&
          (c.hasOwnProperty(e) && (c['_' + e] = c[e]), (c[e] = d[e]));
    }
    c.name = b.name;
    b.helperType && (c.helperType = b.helperType);
    if (b.modeProps) for (e in b.modeProps) c[e] = b.modeProps[e];
    return c;
  };
  q.defineMode('null', function () {
    return {
      token: function (a) {
        a.skipToEnd();
      },
    };
  });
  q.defineMIME('text/plain', 'null');
  var Ib = (q.modeExtensions = {});
  q.extendMode = function (a, b) {
    var c = Ib.hasOwnProperty(a) ? Ib[a] : (Ib[a] = {});
    V(b, c);
  };
  q.defineExtension = function (a, b) {
    q.prototype[a] = b;
  };
  q.defineDocExtension = function (a, b) {
    P.prototype[a] = b;
  };
  q.defineOption = x;
  var yc = [];
  q.defineInitHook = function (a) {
    yc.push(a);
  };
  var $a = (q.helpers = {});
  q.registerHelper = function (a, b, c) {
    $a.hasOwnProperty(a) || ($a[a] = q[a] = { _global: [] });
    $a[a][b] = c;
  };
  q.registerGlobalHelper = function (a, b, c, d) {
    q.registerHelper(a, b, d);
    $a[a]._global.push({ pred: c, val: d });
  };
  var Sa = (q.copyState = function (a, b) {
      if (!0 === b) return b;
      if (a.copyState) return a.copyState(b);
      var c = {},
        d;
      for (d in b) {
        var e = b[d];
        e instanceof Array && (e = e.concat([]));
        c[d] = e;
      }
      return c;
    }),
    Df = (q.startState = function (a, b, c) {
      return a.startState ? a.startState(b, c) : !0;
    });
  q.innerMode = function (a, b) {
    for (; a.innerMode; ) {
      var c = a.innerMode(b);
      if (!c || c.mode == a) break;
      b = c.state;
      a = c.mode;
    }
    return c || { mode: a, state: b };
  };
  var ic = (q.commands = {
      selectAll: function (a) {
        a.setSelection(r(a.firstLine(), 0), r(a.lastLine()), ha);
      },
      singleSelection: function (a) {
        a.setSelection(a.getCursor('anchor'), a.getCursor('head'), ha);
      },
      killLine: function (a) {
        Va(a, function (b) {
          if (b.empty()) {
            var c = u(a.doc, b.head.line).text.length;
            return b.head.ch == c && b.head.line < a.lastLine()
              ? { from: b.head, to: r(b.head.line + 1, 0) }
              : { from: b.head, to: r(b.head.line, c) };
          }
          return { from: b.from(), to: b.to() };
        });
      },
      deleteLine: function (a) {
        Va(a, function (b) {
          return {
            from: r(b.from().line, 0),
            to: w(a.doc, r(b.to().line + 1, 0)),
          };
        });
      },
      delLineLeft: function (a) {
        Va(a, function (a) {
          return { from: r(a.from().line, 0), to: a.from() };
        });
      },
      delWrappedLineLeft: function (a) {
        Va(a, function (b) {
          var c = a.charCoords(b.head, 'div').top + 5;
          return {
            from: a.coordsChar({ left: 0, top: c }, 'div'),
            to: b.from(),
          };
        });
      },
      delWrappedLineRight: function (a) {
        Va(a, function (b) {
          var c = a.charCoords(b.head, 'div').top + 5,
            c = a.coordsChar(
              { left: a.display.lineDiv.offsetWidth + 100, top: c },
              'div'
            );
          return { from: b.from(), to: c };
        });
      },
      undo: function (a) {
        a.undo();
      },
      redo: function (a) {
        a.redo();
      },
      undoSelection: function (a) {
        a.undoSelection();
      },
      redoSelection: function (a) {
        a.redoSelection();
      },
      goDocStart: function (a) {
        a.extendSelection(r(a.firstLine(), 0));
      },
      goDocEnd: function (a) {
        a.extendSelection(r(a.lastLine()));
      },
      goLineStart: function (a) {
        a.extendSelectionsBy(
          function (b) {
            return kf(a, b.head.line);
          },
          { origin: '+move', bias: 1 }
        );
      },
      goLineStartSmart: function (a) {
        a.extendSelectionsBy(
          function (b) {
            return lf(a, b.head);
          },
          { origin: '+move', bias: 1 }
        );
      },
      goLineEnd: function (a) {
        a.extendSelectionsBy(
          function (b) {
            b = b.head.line;
            for (var c, d = u(a.doc, b); (c = Aa(d, !1)); )
              (d = c.find(1, !0).line), (b = null);
            c = (c = Y(d)) ? (c[0].level % 2 ? ac(d) : bc(d)) : d.text.length;
            return r(null == b ? F(d) : b, c);
          },
          { origin: '+move', bias: -1 }
        );
      },
      goLineRight: function (a) {
        a.extendSelectionsBy(function (b) {
          b = a.charCoords(b.head, 'div').top + 5;
          return a.coordsChar(
            { left: a.display.lineDiv.offsetWidth + 100, top: b },
            'div'
          );
        }, Gb);
      },
      goLineLeft: function (a) {
        a.extendSelectionsBy(function (b) {
          b = a.charCoords(b.head, 'div').top + 5;
          return a.coordsChar({ left: 0, top: b }, 'div');
        }, Gb);
      },
      goLineLeftSmart: function (a) {
        a.extendSelectionsBy(function (b) {
          var c = a.charCoords(b.head, 'div').top + 5,
            c = a.coordsChar({ left: 0, top: c }, 'div');
          return c.ch < a.getLine(c.line).search(/\S/) ? lf(a, b.head) : c;
        }, Gb);
      },
      goLineUp: function (a) {
        a.moveV(-1, 'line');
      },
      goLineDown: function (a) {
        a.moveV(1, 'line');
      },
      goPageUp: function (a) {
        a.moveV(-1, 'page');
      },
      goPageDown: function (a) {
        a.moveV(1, 'page');
      },
      goCharLeft: function (a) {
        a.moveH(-1, 'char');
      },
      goCharRight: function (a) {
        a.moveH(1, 'char');
      },
      goColumnLeft: function (a) {
        a.moveH(-1, 'column');
      },
      goColumnRight: function (a) {
        a.moveH(1, 'column');
      },
      goWordLeft: function (a) {
        a.moveH(-1, 'word');
      },
      goGroupRight: function (a) {
        a.moveH(1, 'group');
      },
      goGroupLeft: function (a) {
        a.moveH(-1, 'group');
      },
      goWordRight: function (a) {
        a.moveH(1, 'word');
      },
      delCharBefore: function (a) {
        a.deleteH(-1, 'char');
      },
      delCharAfter: function (a) {
        a.deleteH(1, 'char');
      },
      delWordBefore: function (a) {
        a.deleteH(-1, 'word');
      },
      delWordAfter: function (a) {
        a.deleteH(1, 'word');
      },
      delGroupBefore: function (a) {
        a.deleteH(-1, 'group');
      },
      delGroupAfter: function (a) {
        a.deleteH(1, 'group');
      },
      indentAuto: function (a) {
        a.indentSelection('smart');
      },
      indentMore: function (a) {
        a.indentSelection('add');
      },
      indentLess: function (a) {
        a.indentSelection('subtract');
      },
      insertTab: function (a) {
        a.replaceSelection('\t');
      },
      insertSoftTab: function (a) {
        for (
          var b = [], c = a.listSelections(), d = a.options.tabSize, e = 0;
          e < c.length;
          e++
        ) {
          var f = c[e].from(),
            f = aa(a.getLine(f.line), f.ch, d);
          b.push(Array(d - (f % d) + 1).join(' '));
        }
        a.replaceSelections(b);
      },
      defaultTab: function (a) {
        a.somethingSelected()
          ? a.indentSelection('add')
          : a.execCommand('insertTab');
      },
      transposeChars: function (a) {
        T(a, function () {
          for (var b = a.listSelections(), c = [], d = 0; d < b.length; d++) {
            var e = b[d].head,
              f = u(a.doc, e.line).text;
            if (f)
              if ((e.ch == f.length && (e = new r(e.line, e.ch - 1)), 0 < e.ch))
                (e = new r(e.line, e.ch + 1)),
                  a.replaceRange(
                    f.charAt(e.ch - 1) + f.charAt(e.ch - 2),
                    r(e.line, e.ch - 2),
                    e,
                    '+transpose'
                  );
              else if (e.line > a.doc.first) {
                var g = u(a.doc, e.line - 1).text;
                g &&
                  a.replaceRange(
                    f.charAt(0) + '\n' + g.charAt(g.length - 1),
                    r(e.line - 1, g.length - 1),
                    r(e.line, 1),
                    '+transpose'
                  );
              }
            c.push(new z(e, e));
          }
          a.setSelections(c);
        });
      },
      newlineAndIndent: function (a) {
        T(a, function () {
          for (var b = a.listSelections().length, c = 0; c < b; c++) {
            var d = a.listSelections()[c];
            a.replaceRange('\n', d.anchor, d.head, '+input');
            a.indentLine(d.from().line + 1, null, !0);
            Pa(a);
          }
        });
      },
      toggleOverwrite: function (a) {
        a.toggleOverwrite();
      },
    }),
    ua = (q.keyMap = {});
  ua.basic = {
    Left: 'goCharLeft',
    Right: 'goCharRight',
    Up: 'goLineUp',
    Down: 'goLineDown',
    End: 'goLineEnd',
    Home: 'goLineStartSmart',
    PageUp: 'goPageUp',
    PageDown: 'goPageDown',
    Delete: 'delCharAfter',
    Backspace: 'delCharBefore',
    'Shift-Backspace': 'delCharBefore',
    Tab: 'defaultTab',
    'Shift-Tab': 'indentAuto',
    Enter: 'newlineAndIndent',
    Insert: 'toggleOverwrite',
    Esc: 'singleSelection',
  };
  ua.pcDefault = {
    'Ctrl-A': 'selectAll',
    'Ctrl-D': 'deleteLine',
    'Ctrl-Z': 'undo',
    'Shift-Ctrl-Z': 'redo',
    'Ctrl-Y': 'redo',
    'Ctrl-Home': 'goDocStart',
    'Ctrl-End': 'goDocEnd',
    'Ctrl-Up': 'goLineUp',
    'Ctrl-Down': 'goLineDown',
    'Ctrl-Left': 'goGroupLeft',
    'Ctrl-Right': 'goGroupRight',
    'Alt-Left': 'goLineStart',
    'Alt-Right': 'goLineEnd',
    'Ctrl-Backspace': 'delGroupBefore',
    'Ctrl-Delete': 'delGroupAfter',
    'Ctrl-S': 'save',
    'Ctrl-F': 'find',
    'Ctrl-G': 'findNext',
    'Shift-Ctrl-G': 'findPrev',
    'Shift-Ctrl-F': 'replace',
    'Shift-Ctrl-R': 'replaceAll',
    'Ctrl-[': 'indentLess',
    'Ctrl-]': 'indentMore',
    'Ctrl-U': 'undoSelection',
    'Shift-Ctrl-U': 'redoSelection',
    'Alt-U': 'redoSelection',
    fallthrough: 'basic',
  };
  ua.emacsy = {
    'Ctrl-F': 'goCharRight',
    'Ctrl-B': 'goCharLeft',
    'Ctrl-P': 'goLineUp',
    'Ctrl-N': 'goLineDown',
    'Alt-F': 'goWordRight',
    'Alt-B': 'goWordLeft',
    'Ctrl-A': 'goLineStart',
    'Ctrl-E': 'goLineEnd',
    'Ctrl-V': 'goPageDown',
    'Shift-Ctrl-V': 'goPageUp',
    'Ctrl-D': 'delCharAfter',
    'Ctrl-H': 'delCharBefore',
    'Alt-D': 'delWordAfter',
    'Alt-Backspace': 'delWordBefore',
    'Ctrl-K': 'killLine',
    'Ctrl-T': 'transposeChars',
  };
  ua.macDefault = {
    'Cmd-A': 'selectAll',
    'Cmd-D': 'deleteLine',
    'Cmd-Z': 'undo',
    'Shift-Cmd-Z': 'redo',
    'Cmd-Y': 'redo',
    'Cmd-Home': 'goDocStart',
    'Cmd-Up': 'goDocStart',
    'Cmd-End': 'goDocEnd',
    'Cmd-Down': 'goDocEnd',
    'Alt-Left': 'goGroupLeft',
    'Alt-Right': 'goGroupRight',
    'Cmd-Left': 'goLineLeft',
    'Cmd-Right': 'goLineRight',
    'Alt-Backspace': 'delGroupBefore',
    'Ctrl-Alt-Backspace': 'delGroupAfter',
    'Alt-Delete': 'delGroupAfter',
    'Cmd-S': 'save',
    'Cmd-F': 'find',
    'Cmd-G': 'findNext',
    'Shift-Cmd-G': 'findPrev',
    'Cmd-Alt-F': 'replace',
    'Shift-Cmd-Alt-F': 'replaceAll',
    'Cmd-[': 'indentLess',
    'Cmd-]': 'indentMore',
    'Cmd-Backspace': 'delWrappedLineLeft',
    'Cmd-Delete': 'delWrappedLineRight',
    'Cmd-U': 'undoSelection',
    'Shift-Cmd-U': 'redoSelection',
    'Ctrl-Up': 'goDocStart',
    'Ctrl-Down': 'goDocEnd',
    fallthrough: ['basic', 'emacsy'],
  };
  ua['default'] = W ? ua.macDefault : ua.pcDefault;
  q.normalizeKeyMap = function (a) {
    var b = {},
      c;
    for (c in a)
      if (a.hasOwnProperty(c)) {
        var d = a[c];
        if (!/^(name|fallthrough|(de|at)tach)$/.test(c)) {
          if ('...' != d)
            for (var e = ob(c.split(' '), Wf), f = 0; f < e.length; f++) {
              var g, h;
              f == e.length - 1
                ? ((h = c), (g = d))
                : ((h = e.slice(0, f + 1).join(' ')), (g = '...'));
              var k = b[h];
              if (!k) b[h] = g;
              else if (k != g) throw Error('Inconsistent bindings for ' + h);
            }
          delete a[c];
        }
      }
    for (var l in b) a[l] = b[l];
    return a;
  };
  var xb = (q.lookupKey = function (a, b, c, d) {
      b = pc(b);
      var e = b.call ? b.call(a, d) : b[a];
      if (!1 === e) return 'nothing';
      if ('...' === e) return 'multi';
      if (null != e && c(e)) return 'handled';
      if (b.fallthrough) {
        if ('[object Array]' != Object.prototype.toString.call(b.fallthrough))
          return xb(a, b.fallthrough, c, d);
        for (e = 0; e < b.fallthrough.length; e++) {
          var f = xb(a, b.fallthrough[e], c, d);
          if (f) return f;
        }
      }
    }),
    Pf = (q.isModifierKey = function (a) {
      a = 'string' == typeof a ? a : va[a.keyCode];
      return 'Ctrl' == a || 'Alt' == a || 'Shift' == a || 'Mod' == a;
    }),
    Rf = (q.keyName = function (a, b) {
      if (ba && 34 == a.keyCode && a['char']) return !1;
      var c = va[a.keyCode],
        d = c;
      if (null == d || a.altGraphKey) return !1;
      a.altKey && 'Alt' != c && (d = 'Alt-' + d);
      (of ? a.metaKey : a.ctrlKey) && 'Ctrl' != c && (d = 'Ctrl-' + d);
      (of ? a.ctrlKey : a.metaKey) && 'Cmd' != c && (d = 'Cmd-' + d);
      !b && a.shiftKey && 'Shift' != c && (d = 'Shift-' + d);
      return d;
    });
  q.fromTextArea = function (a, b) {
    function c() {
      a.value = k.getValue();
    }
    b = b ? V(b) : {};
    b.value = a.value;
    !b.tabindex && a.tabIndex && (b.tabindex = a.tabIndex);
    !b.placeholder && a.placeholder && (b.placeholder = a.placeholder);
    if (null == b.autofocus) {
      var d = fa();
      b.autofocus =
        d == a || (null != a.getAttribute('autofocus') && d == document.body);
    }
    if (a.form && (v(a.form, 'submit', c), !b.leaveSubmitMethodAlone)) {
      var e = a.form,
        f = e.submit;
      try {
        var g = (e.submit = function () {
          c();
          e.submit = f;
          e.submit();
          e.submit = g;
        });
      } catch (h) {}
    }
    b.finishInit = function (b) {
      b.save = c;
      b.getTextArea = function () {
        return a;
      };
      b.toTextArea = function () {
        b.toTextArea = isNaN;
        c();
        a.parentNode.removeChild(b.getWrapperElement());
        a.style.display = '';
        a.form &&
          (ka(a.form, 'submit', c),
          'function' == typeof a.form.submit && (a.form.submit = f));
      };
    };
    a.style.display = 'none';
    var k = q(function (b) {
      a.parentNode.insertBefore(b, a.nextSibling);
    }, b);
    return k;
  };
  var tc = (q.StringStream = function (a, b) {
    this.pos = this.start = 0;
    this.string = a;
    this.tabSize = b || 8;
    this.lineStart = this.lastColumnPos = this.lastColumnValue = 0;
  });
  tc.prototype = {
    eol: function () {
      return this.pos >= this.string.length;
    },
    sol: function () {
      return this.pos == this.lineStart;
    },
    peek: function () {
      return this.string.charAt(this.pos) || void 0;
    },
    next: function () {
      if (this.pos < this.string.length) return this.string.charAt(this.pos++);
    },
    eat: function (a) {
      var b = this.string.charAt(this.pos);
      if ('string' == typeof a ? b == a : b && (a.test ? a.test(b) : a(b)))
        return ++this.pos, b;
    },
    eatWhile: function (a) {
      for (var b = this.pos; this.eat(a); );
      return this.pos > b;
    },
    eatSpace: function () {
      for (var a = this.pos; /[\s\u00a0]/.test(this.string.charAt(this.pos)); )
        ++this.pos;
      return this.pos > a;
    },
    skipToEnd: function () {
      this.pos = this.string.length;
    },
    skipTo: function (a) {
      a = this.string.indexOf(a, this.pos);
      if (-1 < a) return (this.pos = a), !0;
    },
    backUp: function (a) {
      this.pos -= a;
    },
    column: function () {
      this.lastColumnPos < this.start &&
        ((this.lastColumnValue = aa(
          this.string,
          this.start,
          this.tabSize,
          this.lastColumnPos,
          this.lastColumnValue
        )),
        (this.lastColumnPos = this.start));
      return (
        this.lastColumnValue -
        (this.lineStart ? aa(this.string, this.lineStart, this.tabSize) : 0)
      );
    },
    indentation: function () {
      return (
        aa(this.string, null, this.tabSize) -
        (this.lineStart ? aa(this.string, this.lineStart, this.tabSize) : 0)
      );
    },
    match: function (a, b, c) {
      if ('string' == typeof a) {
        var d = function (a) {
            return c ? a.toLowerCase() : a;
          },
          e = this.string.substr(this.pos, a.length);
        if (d(e) == d(a)) return !1 !== b && (this.pos += a.length), !0;
      } else {
        if ((a = this.string.slice(this.pos).match(a)) && 0 < a.index)
          return null;
        a && !1 !== b && (this.pos += a[0].length);
        return a;
      }
    },
    current: function () {
      return this.string.slice(this.start, this.pos);
    },
    hideFirstChars: function (a, b) {
      this.lineStart += a;
      try {
        return b();
      } finally {
        this.lineStart -= a;
      }
    },
  };
  var sd = 0,
    Ha = (q.TextMarker = function (a, b) {
      this.lines = [];
      this.type = b;
      this.doc = a;
      this.id = ++sd;
    });
  Ya(Ha);
  Ha.prototype.clear = function () {
    if (!this.explicitlyCleared) {
      var a = this.doc.cm,
        b = a && !a.curOp;
      b && Ja(a);
      if (S(this, 'clear')) {
        var c = this.find();
        c && L(this, 'clear', c.from, c.to);
      }
      for (var d = (c = null), e = 0; e < this.lines.length; ++e) {
        var f = this.lines[e],
          g = zb(f.markedSpans, this);
        a && !this.collapsed
          ? na(a, F(f), 'text')
          : a && (null != g.to && (d = F(f)), null != g.from && (c = F(f)));
        for (
          var h = f, k = f.markedSpans, l = g, m = void 0, p = 0;
          p < k.length;
          ++p
        )
          k[p] != l && (m || (m = [])).push(k[p]);
        h.markedSpans = m;
        null == g.from &&
          this.collapsed &&
          !ya(this.doc, f) &&
          a &&
          ca(f, xa(a.display));
      }
      if (a && this.collapsed && !a.options.lineWrapping)
        for (e = 0; e < this.lines.length; ++e)
          (f = ia(this.lines[e])),
            (g = Kb(f)),
            g > a.display.maxLineLength &&
              ((a.display.maxLine = f),
              (a.display.maxLineLength = g),
              (a.display.maxLineChanged = !0));
      null != c && a && this.collapsed && Q(a, c, d + 1);
      this.lines.length = 0;
      this.explicitlyCleared = !0;
      this.atomic &&
        this.doc.cantEdit &&
        ((this.doc.cantEdit = !1), a && ge(a.doc));
      a && L(a, 'markerCleared', a, this);
      b && La(a);
      this.parent && this.parent.clear();
    }
  };
  Ha.prototype.find = function (a, b) {
    null == a && 'bookmark' == this.type && (a = 1);
    for (var c, d, e = 0; e < this.lines.length; ++e) {
      var f = this.lines[e],
        g = zb(f.markedSpans, this);
      if (null != g.from && ((c = r(b ? f : F(f), g.from)), -1 == a)) return c;
      if (null != g.to && ((d = r(b ? f : F(f), g.to)), 1 == a)) return d;
    }
    return c && { from: c, to: d };
  };
  Ha.prototype.changed = function () {
    var a = this.find(-1, !0),
      b = this,
      c = this.doc.cm;
    a &&
      c &&
      T(c, function () {
        var d = a.line,
          e = F(a.line);
        if ((e = Vc(c, e)))
          le(e), (c.curOp.selectionChanged = c.curOp.forceUpdate = !0);
        c.curOp.updateMaxLine = !0;
        ya(b.doc, d) ||
          null == b.height ||
          ((e = b.height),
          (b.height = null),
          (e = ub(b) - e) && ca(d, d.height + e));
      });
  };
  Ha.prototype.attachLine = function (a) {
    if (!this.lines.length && this.doc.cm) {
      var b = this.doc.cm.curOp;
      (b.maybeHiddenMarkers && -1 != D(b.maybeHiddenMarkers, this)) ||
        (b.maybeUnhiddenMarkers || (b.maybeUnhiddenMarkers = [])).push(this);
    }
    this.lines.push(a);
  };
  Ha.prototype.detachLine = function (a) {
    this.lines.splice(D(this.lines, a), 1);
    !this.lines.length &&
      this.doc.cm &&
      ((a = this.doc.cm.curOp),
      (a.maybeHiddenMarkers || (a.maybeHiddenMarkers = [])).push(this));
  };
  var sd = 0,
    rc = (q.SharedTextMarker = function (a, b) {
      this.markers = a;
      this.primary = b;
      for (var c = 0; c < a.length; ++c) a[c].parent = this;
    });
  Ya(rc);
  rc.prototype.clear = function () {
    if (!this.explicitlyCleared) {
      this.explicitlyCleared = !0;
      for (var a = 0; a < this.markers.length; ++a) this.markers[a].clear();
      L(this, 'clear');
    }
  };
  rc.prototype.find = function (a, b) {
    return this.primary.find(a, b);
  };
  var sc = (q.LineWidget = function (a, b, c) {
    if (c) for (var d in c) c.hasOwnProperty(d) && (this[d] = c[d]);
    this.doc = a;
    this.node = b;
  });
  Ya(sc);
  sc.prototype.clear = function () {
    var a = this.doc.cm,
      b = this.line.widgets,
      c = this.line,
      d = F(c);
    if (null != d && b) {
      for (var e = 0; e < b.length; ++e) b[e] == this && b.splice(e--, 1);
      b.length || (c.widgets = null);
      var f = ub(this);
      ca(c, Math.max(0, c.height - f));
      a &&
        T(a, function () {
          var b = -f;
          ea(c) < ((a.curOp && a.curOp.scrollTop) || a.doc.scrollTop) &&
            lc(a, null, b);
          na(a, d, 'widget');
        });
    }
  };
  sc.prototype.changed = function () {
    var a = this.height,
      b = this.doc.cm,
      c = this.line;
    this.height = null;
    var d = ub(this) - a;
    d &&
      (ca(c, c.height + d),
      b &&
        T(b, function () {
          b.curOp.forceUpdate = !0;
          ea(c) < ((b.curOp && b.curOp.scrollTop) || b.doc.scrollTop) &&
            lc(b, null, d);
        }));
  };
  var Ab = (q.Line = function (a, b, c) {
    this.text = a;
    Ue(this, b);
    this.height = c ? c(this) : 1;
  });
  Ya(Ab);
  Ab.prototype.lineNo = function () {
    return F(this);
  };
  var bg = {},
    ag = {};
  Bb.prototype = {
    chunkSize: function () {
      return this.lines.length;
    },
    removeInner: function (a, b) {
      for (var c = a, d = a + b; c < d; ++c) {
        var e = this.lines[c];
        this.height -= e.height;
        var f = e;
        f.parent = null;
        Te(f);
        L(e, 'delete');
      }
      this.lines.splice(a, b);
    },
    collapse: function (a) {
      a.push.apply(a, this.lines);
    },
    insertInner: function (a, b, c) {
      this.height += c;
      this.lines = this.lines.slice(0, a).concat(b).concat(this.lines.slice(a));
      for (a = 0; a < b.length; ++a) b[a].parent = this;
    },
    iterN: function (a, b, c) {
      for (b = a + b; a < b; ++a) if (c(this.lines[a])) return !0;
    },
  };
  Cb.prototype = {
    chunkSize: function () {
      return this.size;
    },
    removeInner: function (a, b) {
      this.size -= b;
      for (var c = 0; c < this.children.length; ++c) {
        var d = this.children[c],
          e = d.chunkSize();
        if (a < e) {
          var f = Math.min(b, e - a),
            g = d.height;
          d.removeInner(a, f);
          this.height -= g - d.height;
          e == f && (this.children.splice(c--, 1), (d.parent = null));
          if (0 == (b -= f)) break;
          a = 0;
        } else a -= e;
      }
      25 > this.size - b &&
        (1 < this.children.length || !(this.children[0] instanceof Bb)) &&
        ((c = []),
        this.collapse(c),
        (this.children = [new Bb(c)]),
        (this.children[0].parent = this));
    },
    collapse: function (a) {
      for (var b = 0; b < this.children.length; ++b)
        this.children[b].collapse(a);
    },
    insertInner: function (a, b, c) {
      this.size += b.length;
      this.height += c;
      for (var d = 0; d < this.children.length; ++d) {
        var e = this.children[d],
          f = e.chunkSize();
        if (a <= f) {
          e.insertInner(a, b, c);
          if (e.lines && 50 < e.lines.length) {
            for (; 50 < e.lines.length; )
              (a = e.lines.splice(e.lines.length - 25, 25)),
                (a = new Bb(a)),
                (e.height -= a.height),
                this.children.splice(d + 1, 0, a),
                (a.parent = this);
            this.maybeSpill();
          }
          break;
        }
        a -= f;
      }
    },
    maybeSpill: function () {
      if (!(10 >= this.children.length)) {
        var a = this;
        do {
          var b = a.children.splice(a.children.length - 5, 5),
            b = new Cb(b);
          if (a.parent) {
            a.size -= b.size;
            a.height -= b.height;
            var c = D(a.parent.children, a);
            a.parent.children.splice(c + 1, 0, b);
          } else
            (c = new Cb(a.children)),
              (c.parent = a),
              (a.children = [c, b]),
              (a = c);
          b.parent = a.parent;
        } while (10 < a.children.length);
        a.parent.maybeSpill();
      }
    },
    iterN: function (a, b, c) {
      for (var d = 0; d < this.children.length; ++d) {
        var e = this.children[d],
          f = e.chunkSize();
        if (a < f) {
          f = Math.min(b, f - a);
          if (e.iterN(a, f, c)) return !0;
          if (0 == (b -= f)) break;
          a = 0;
        } else a -= f;
      }
    },
  };
  var og = 0,
    P = (q.Doc = function (a, b, c) {
      if (!(this instanceof P)) return new P(a, b, c);
      null == c && (c = 0);
      Cb.call(this, [new Bb([new Ab('', null)])]);
      this.first = c;
      this.scrollTop = this.scrollLeft = 0;
      this.cantEdit = !1;
      this.cleanGeneration = 1;
      this.frontier = c;
      c = r(c, 0);
      this.sel = ga(c);
      this.history = new uc(null);
      this.id = ++og;
      this.modeOption = b;
      'string' == typeof a && (a = sa(a));
      qd(this, { from: c, to: c, text: a });
      H(this, ga(c), ha);
    });
  P.prototype = ff(Cb.prototype, {
    constructor: P,
    iter: function (a, b, c) {
      c
        ? this.iterN(a - this.first, b - a, c)
        : this.iterN(this.first, this.first + this.size, a);
    },
    insert: function (a, b) {
      for (var c = 0, d = 0; d < b.length; ++d) c += b[d].height;
      this.insertInner(a - this.first, b, c);
    },
    remove: function (a, b) {
      this.removeInner(a - this.first, b);
    },
    getValue: function (a) {
      var b = xd(this, this.first, this.first + this.size);
      return !1 === a ? b : b.join(a || '\n');
    },
    setValue: N(function (a) {
      var b = r(this.first, 0),
        c = this.first + this.size - 1;
      Oa(
        this,
        {
          from: b,
          to: r(c, u(this, c).text.length),
          text: sa(a),
          origin: 'setValue',
          full: !0,
        },
        !0
      );
      H(this, ga(b));
    }),
    replaceRange: function (a, b, c, d) {
      b = w(this, b);
      c = c ? w(this, c) : b;
      wb(this, a, b, c, d);
    },
    getRange: function (a, b, c) {
      a = Da(this, w(this, a), w(this, b));
      return !1 === c ? a : a.join(c || '\n');
    },
    getLine: function (a) {
      return (a = this.getLineHandle(a)) && a.text;
    },
    getLineHandle: function (a) {
      if (qb(this, a)) return u(this, a);
    },
    getLineNumber: function (a) {
      return F(a);
    },
    getLineHandleVisualStart: function (a) {
      'number' == typeof a && (a = u(this, a));
      return ia(a);
    },
    lineCount: function () {
      return this.size;
    },
    firstLine: function () {
      return this.first;
    },
    lastLine: function () {
      return this.first + this.size - 1;
    },
    clipPos: function (a) {
      return w(this, a);
    },
    getCursor: function (a) {
      var b = this.sel.primary();
      return null == a || 'head' == a
        ? b.head
        : 'anchor' == a
        ? b.anchor
        : 'end' == a || 'to' == a || !1 === a
        ? b.to()
        : b.from();
    },
    listSelections: function () {
      return this.sel.ranges;
    },
    somethingSelected: function () {
      return this.sel.somethingSelected();
    },
    setCursor: N(function (a, b, c) {
      a = w(this, 'number' == typeof a ? r(a, b || 0) : a);
      H(this, ga(a, null), c);
    }),
    setSelection: N(function (a, b, c) {
      var d = w(this, a);
      a = w(this, b || a);
      H(this, ga(d, a), c);
    }),
    extendSelection: N(function (a, b, c) {
      Ub(this, w(this, a), b && w(this, b), c);
    }),
    extendSelections: N(function (a, b) {
      for (var c = [], d = 0; d < a.length; d++) c[d] = w(this, a[d]);
      ae(this, c);
    }),
    extendSelectionsBy: N(function (a, b) {
      ae(this, ob(this.sel.ranges, a), b);
    }),
    setSelections: N(function (a, b, c) {
      if (a.length) {
        for (var d = 0, e = []; d < a.length; d++)
          e[d] = new z(w(this, a[d].anchor), w(this, a[d].head));
        null == b && (b = Math.min(a.length - 1, this.sel.primIndex));
        H(this, Z(e, b), c);
      }
    }),
    addSelection: N(function (a, b, c) {
      var d = this.sel.ranges.slice(0);
      d.push(new z(w(this, a), w(this, b || a)));
      H(this, Z(d, d.length - 1), c);
    }),
    getSelection: function (a) {
      for (var b = this.sel.ranges, c, d = 0; d < b.length; d++) {
        var e = Da(this, b[d].from(), b[d].to());
        c = c ? c.concat(e) : e;
      }
      return !1 === a ? c : c.join(a || '\n');
    },
    getSelections: function (a) {
      for (var b = [], c = this.sel.ranges, d = 0; d < c.length; d++) {
        var e = Da(this, c[d].from(), c[d].to());
        !1 !== a && (e = e.join(a || '\n'));
        b[d] = e;
      }
      return b;
    },
    replaceSelection: function (a, b, c) {
      for (var d = [], e = 0; e < this.sel.ranges.length; e++) d[e] = a;
      this.replaceSelections(d, b, c || '+input');
    },
    replaceSelections: N(function (a, b, c) {
      for (var d = [], e = this.sel, f = 0; f < e.ranges.length; f++) {
        var g = e.ranges[f];
        d[f] = { from: g.from(), to: g.to(), text: sa(a[f]), origin: c };
      }
      if ((f = b && 'end' != b)) {
        f = [];
        c = a = r(this.first, 0);
        for (e = 0; e < d.length; e++) {
          var h = d[e],
            g = Ee(h.from, a, c),
            k = Ee(ta(h), a, c);
          a = h.to;
          c = k;
          'around' == b
            ? ((h = this.sel.ranges[e]),
              (h = 0 > y(h.head, h.anchor)),
              (f[e] = new z(h ? k : g, h ? g : k)))
            : (f[e] = new z(g, g));
        }
        f = new la(f, this.sel.primIndex);
      }
      b = f;
      for (f = d.length - 1; 0 <= f; f--) Oa(this, d[f]);
      b ? be(this, b) : this.cm && Pa(this.cm);
    }),
    undo: N(function () {
      kc(this, 'undo');
    }),
    redo: N(function () {
      kc(this, 'redo');
    }),
    undoSelection: N(function () {
      kc(this, 'undo', !0);
    }),
    redoSelection: N(function () {
      kc(this, 'redo', !0);
    }),
    setExtending: function (a) {
      this.extend = a;
    },
    getExtending: function () {
      return this.extend;
    },
    historySize: function () {
      for (var a = this.history, b = 0, c = 0, d = 0; d < a.done.length; d++)
        a.done[d].ranges || ++b;
      for (d = 0; d < a.undone.length; d++) a.undone[d].ranges || ++c;
      return { undo: b, redo: c };
    },
    clearHistory: function () {
      this.history = new uc(this.history.maxGeneration);
    },
    markClean: function () {
      this.cleanGeneration = this.changeGeneration(!0);
    },
    changeGeneration: function (a) {
      a &&
        (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null);
      return this.history.generation;
    },
    isClean: function (a) {
      return this.history.generation == (a || this.cleanGeneration);
    },
    getHistory: function () {
      return { done: Xa(this.history.done), undone: Xa(this.history.undone) };
    },
    setHistory: function (a) {
      var b = (this.history = new uc(this.history.maxGeneration));
      b.done = Xa(a.done.slice(0), null, !0);
      b.undone = Xa(a.undone.slice(0), null, !0);
    },
    addLineClass: N(function (a, b, c) {
      return nc(this, a, 'gutter' == b ? 'gutter' : 'class', function (a) {
        var e =
          'text' == b
            ? 'textClass'
            : 'background' == b
            ? 'bgClass'
            : 'gutter' == b
            ? 'gutterClass'
            : 'wrapClass';
        if (a[e]) {
          if (Fb(c).test(a[e])) return !1;
          a[e] += ' ' + c;
        } else a[e] = c;
        return !0;
      });
    }),
    removeLineClass: N(function (a, b, c) {
      return nc(this, a, 'gutter' == b ? 'gutter' : 'class', function (a) {
        var e =
            'text' == b
              ? 'textClass'
              : 'background' == b
              ? 'bgClass'
              : 'gutter' == b
              ? 'gutterClass'
              : 'wrapClass',
          f = a[e];
        if (f)
          if (null == c) a[e] = null;
          else {
            var g = f.match(Fb(c));
            if (!g) return !1;
            var h = g.index + g[0].length;
            a[e] =
              f.slice(0, g.index) +
                (g.index && h != f.length ? ' ' : '') +
                f.slice(h) || null;
          }
        else return !1;
        return !0;
      });
    }),
    addLineWidget: N(function (a, b, c) {
      return $f(this, a, b, c);
    }),
    removeLineWidget: function (a) {
      a.clear();
    },
    markText: function (a, b, c) {
      return Wa(this, w(this, a), w(this, b), c, 'range');
    },
    setBookmark: function (a, b) {
      var c = {
        replacedWith: b && (null == b.nodeType ? b.widget : b),
        insertLeft: b && b.insertLeft,
        clearWhenEmpty: !1,
        shared: b && b.shared,
        handleMouseEvents: b && b.handleMouseEvents,
      };
      a = w(this, a);
      return Wa(this, a, a, c, 'bookmark');
    },
    findMarksAt: function (a) {
      a = w(this, a);
      var b = [],
        c = u(this, a.line).markedSpans;
      if (c)
        for (var d = 0; d < c.length; ++d) {
          var e = c[d];
          (null == e.from || e.from <= a.ch) &&
            (null == e.to || e.to >= a.ch) &&
            b.push(e.marker.parent || e.marker);
        }
      return b;
    },
    findMarks: function (a, b, c) {
      a = w(this, a);
      b = w(this, b);
      var d = [],
        e = a.line;
      this.iter(a.line, b.line + 1, function (f) {
        if ((f = f.markedSpans))
          for (var g = 0; g < f.length; g++) {
            var h = f[g];
            (e == a.line && a.ch > h.to) ||
              (null == h.from && e != a.line) ||
              (e == b.line && h.from > b.ch) ||
              (c && !c(h.marker)) ||
              d.push(h.marker.parent || h.marker);
          }
        ++e;
      });
      return d;
    },
    getAllMarks: function () {
      var a = [];
      this.iter(function (b) {
        if ((b = b.markedSpans))
          for (var c = 0; c < b.length; ++c)
            null != b[c].from && a.push(b[c].marker);
      });
      return a;
    },
    posFromIndex: function (a) {
      var b,
        c = this.first;
      this.iter(function (d) {
        d = d.text.length + 1;
        if (d > a) return (b = a), !0;
        a -= d;
        ++c;
      });
      return w(this, r(c, b));
    },
    indexFromPos: function (a) {
      a = w(this, a);
      var b = a.ch;
      if (a.line < this.first || 0 > a.ch) return 0;
      this.iter(this.first, a.line, function (a) {
        b += a.text.length + 1;
      });
      return b;
    },
    copy: function (a) {
      var b = new P(
        xd(this, this.first, this.first + this.size),
        this.modeOption,
        this.first
      );
      b.scrollTop = this.scrollTop;
      b.scrollLeft = this.scrollLeft;
      b.sel = this.sel;
      b.extend = !1;
      a &&
        ((b.history.undoDepth = this.history.undoDepth),
        b.setHistory(this.getHistory()));
      return b;
    },
    linkedDoc: function (a) {
      a || (a = {});
      var b = this.first,
        c = this.first + this.size;
      null != a.from && a.from > b && (b = a.from);
      null != a.to && a.to < c && (c = a.to);
      b = new P(xd(this, b, c), a.mode || this.modeOption, b);
      a.sharedHist && (b.history = this.history);
      (this.linked || (this.linked = [])).push({
        doc: b,
        sharedHist: a.sharedHist,
      });
      b.linked = [{ doc: this, isParent: !0, sharedHist: a.sharedHist }];
      a = Re(this);
      for (c = 0; c < a.length; c++) {
        var d = a[c],
          e = d.find(),
          f = b.clipPos(e.from),
          e = b.clipPos(e.to);
        y(f, e) &&
          ((f = Wa(b, f, e, d.primary, d.primary.type)),
          d.markers.push(f),
          (f.parent = d));
      }
      return b;
    },
    unlinkDoc: function (a) {
      a instanceof q && (a = a.doc);
      if (this.linked)
        for (var b = 0; b < this.linked.length; ++b)
          if (this.linked[b].doc == a) {
            this.linked.splice(b, 1);
            a.unlinkDoc(this);
            Yf(Re(this));
            break;
          }
      if (a.history == this.history) {
        var c = [a.id];
        Ga(
          a,
          function (a) {
            c.push(a.id);
          },
          !0
        );
        a.history = new uc(null);
        a.history.done = Xa(this.history.done, c);
        a.history.undone = Xa(this.history.undone, c);
      }
    },
    iterLinkedDocs: function (a) {
      Ga(this, a);
    },
    getMode: function () {
      return this.mode;
    },
    getEditor: function () {
      return this.cm;
    },
  });
  P.prototype.eachLine = P.prototype.iter;
  var pg = ['iter', 'insert', 'remove', 'copy', 'getEditor'],
    Jb;
  for (Jb in P.prototype)
    P.prototype.hasOwnProperty(Jb) &&
      0 > D(pg, Jb) &&
      (q.prototype[Jb] = (function (a) {
        return function () {
          return a.apply(this.doc, arguments);
        };
      })(P.prototype[Jb]));
  Ya(P);
  var O = (q.e_preventDefault = function (a) {
      a.preventDefault ? a.preventDefault() : (a.returnValue = !1);
    }),
    qg = (q.e_stopPropagation = function (a) {
      a.stopPropagation ? a.stopPropagation() : (a.cancelBubble = !0);
    }),
    jd = (q.e_stop = function (a) {
      O(a);
      qg(a);
    }),
    v = (q.on = function (a, b, c) {
      a.addEventListener
        ? a.addEventListener(b, c, !1)
        : a.attachEvent
        ? a.attachEvent('on' + b, c)
        : ((a = a._handlers || (a._handlers = {})),
          (a[b] || (a[b] = [])).push(c));
    }),
    ka = (q.off = function (a, b, c) {
      if (a.removeEventListener) a.removeEventListener(b, c, !1);
      else if (a.detachEvent) a.detachEvent('on' + b, c);
      else if ((a = a._handlers && a._handlers[b]))
        for (b = 0; b < a.length; ++b)
          if (a[b] == c) {
            a.splice(b, 1);
            break;
          }
    }),
    K = (q.signal = function (a, b) {
      var c = a._handlers && a._handlers[b];
      if (c)
        for (
          var d = Array.prototype.slice.call(arguments, 2), e = 0;
          e < c.length;
          ++e
        )
          c[e].apply(null, d);
    }),
    Db = null,
    Hd = 30,
    Ae = (q.Pass = {
      toString: function () {
        return 'CodeMirror.Pass';
      },
    }),
    ha = { scroll: !1 },
    kd = { origin: '*mouse' },
    Gb = { origin: '+move' };
  bb.prototype.set = function (a, b) {
    clearTimeout(this.id);
    this.id = setTimeout(b, a);
  };
  var aa = (q.countColumn = function (a, b, c, d, e) {
      null == b && ((b = a.search(/[^\s\u00a0]/)), -1 == b && (b = a.length));
      d = d || 0;
      for (e = e || 0; ; ) {
        var f = a.indexOf('\t', d);
        if (0 > f || f >= b) return e + (b - d);
        e += f - d;
        e += c - (e % c);
        d = f + 1;
      }
    }),
    vc = [''],
    Za = function (a) {
      a.select();
    };
  Qa
    ? (Za = function (a) {
        a.selectionStart = 0;
        a.selectionEnd = a.value.length;
      })
    : B &&
      (Za = function (a) {
        try {
          a.select();
        } catch (b) {}
      });
  var rg = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,
    gf = (q.isWordChar = function (a) {
      return (
        /\w/.test(a) ||
        ('' < a && (a.toUpperCase() != a.toLowerCase() || rg.test(a)))
      );
    }),
    ig = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,
    Ea;
  Ea = document.createRange
    ? function (a, b, c, d) {
        var e = document.createRange();
        e.setEnd(d || a, c);
        e.setStart(a, b);
        return e;
      }
    : function (a, b, c) {
        var d = document.body.createTextRange();
        try {
          d.moveToElementText(a.parentNode);
        } catch (e) {
          return d;
        }
        d.collapse(!0);
        d.moveEnd('character', c);
        d.moveStart('character', b);
        return d;
      };
  var Wc = (q.contains = function (a, b) {
    3 == b.nodeType && (b = b.parentNode);
    if (a.contains) return a.contains(b);
    do if ((11 == b.nodeType && (b = b.host), b == a)) return !0;
    while ((b = b.parentNode));
  });
  B &&
    11 > C &&
    (fa = function () {
      try {
        return document.activeElement;
      } catch (a) {
        return document.body;
      }
    });
  var kb = (q.rmClass = function (a, b) {
      var c = a.className,
        d = Fb(b).exec(c);
      if (d) {
        var e = c.slice(d.index + d[0].length);
        a.className = c.slice(0, d.index) + (e ? d[1] + e : '');
      }
    }),
    mb = (q.addClass = function (a, b) {
      var c = a.className;
      Fb(b).test(c) || (a.className += (c ? ' ' : '') + b);
    }),
    Dd = !1,
    Lf = (function () {
      if (B && 9 > C) return !1;
      var a = t('div');
      return 'draggable' in a || 'dragDrop' in a;
    })(),
    yd,
    vd,
    sa = (q.splitLines =
      3 != '\n\nb'.split(/\n/).length
        ? function (a) {
            for (var b = 0, c = [], d = a.length; b <= d; ) {
              var e = a.indexOf('\n', b);
              -1 == e && (e = a.length);
              var f = a.slice(b, '\r' == a.charAt(e - 1) ? e - 1 : e),
                g = f.indexOf('\r');
              -1 != g
                ? (c.push(f.slice(0, g)), (b += g + 1))
                : (c.push(f), (b = e + 1));
            }
            return c;
          }
        : function (a) {
            return a.split(/\r\n?|\n/);
          }),
    ng = window.getSelection
      ? function (a) {
          try {
            return a.selectionStart != a.selectionEnd;
          } catch (b) {
            return !1;
          }
        }
      : function (a) {
          try {
            var b = a.ownerDocument.selection.createRange();
          } catch (c) {}
          return b && b.parentElement() == a
            ? 0 != b.compareEndPoints('StartToEnd', b)
            : !1;
        },
    Ce = (function () {
      var a = t('div');
      if ('oncopy' in a) return !0;
      a.setAttribute('oncopy', 'return;');
      return 'function' == typeof a.oncopy;
    })(),
    bd = null,
    va = {
      3: 'Enter',
      8: 'Backspace',
      9: 'Tab',
      13: 'Enter',
      16: 'Shift',
      17: 'Ctrl',
      18: 'Alt',
      19: 'Pause',
      20: 'CapsLock',
      27: 'Esc',
      32: 'Space',
      33: 'PageUp',
      34: 'PageDown',
      35: 'End',
      36: 'Home',
      37: 'Left',
      38: 'Up',
      39: 'Right',
      40: 'Down',
      44: 'PrintScrn',
      45: 'Insert',
      46: 'Delete',
      59: ';',
      61: '\x3d',
      91: 'Mod',
      92: 'Mod',
      93: 'Mod',
      107: '\x3d',
      109: '-',
      127: 'Delete',
      173: '-',
      186: ';',
      187: '\x3d',
      188: ',',
      189: '-',
      190: '.',
      191: '/',
      192: '`',
      219: '[',
      220: '\\',
      221: ']',
      222: "'",
      63232: 'Up',
      63233: 'Down',
      63234: 'Left',
      63235: 'Right',
      63272: 'Delete',
      63273: 'Home',
      63275: 'End',
      63276: 'PageUp',
      63277: 'PageDown',
      63302: 'Insert',
    };
  q.keyNames = va;
  (function () {
    for (var a = 0; 10 > a; a++) va[a + 48] = va[a + 96] = String(a);
    for (a = 65; 90 >= a; a++) va[a] = String.fromCharCode(a);
    for (a = 1; 12 >= a; a++) va[a + 111] = va[a + 63235] = 'F' + a;
  })();
  var vb,
    gg = (function () {
      function a(a) {
        return 247 >= a
          ? 'bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN'.charAt(
              a
            )
          : 1424 <= a && 1524 >= a
          ? 'R'
          : 1536 <= a && 1773 >= a
          ? 'rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm'.charAt(
              a - 1536
            )
          : 1774 <= a && 2220 >= a
          ? 'r'
          : 8192 <= a && 8203 >= a
          ? 'w'
          : 8204 == a
          ? 'b'
          : 'L';
      }
      function b(a, b, c) {
        this.level = a;
        this.from = b;
        this.to = c;
      }
      var c = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,
        d = /[stwN]/,
        e = /[LRr]/,
        f = /[Lb1n]/,
        g = /[1n]/;
      return function (h) {
        if (!c.test(h)) return !1;
        for (var k = h.length, l = [], m = 0, p; m < k; ++m)
          l.push(a(h.charCodeAt(m)));
        for (var m = 0, n = 'L'; m < k; ++m)
          (p = l[m]), 'm' == p ? (l[m] = n) : (n = p);
        m = 0;
        for (n = 'L'; m < k; ++m)
          (p = l[m]),
            '1' == p && 'r' == n
              ? (l[m] = 'n')
              : e.test(p) && ((n = p), 'r' == p && (l[m] = 'R'));
        m = 1;
        for (n = l[0]; m < k - 1; ++m)
          (p = l[m]),
            '+' == p && '1' == n && '1' == l[m + 1]
              ? (l[m] = '1')
              : ',' != p ||
                n != l[m + 1] ||
                ('1' != n && 'n' != n) ||
                (l[m] = n),
            (n = p);
        for (m = 0; m < k; ++m)
          if (((p = l[m]), ',' == p)) l[m] = 'N';
          else if ('%' == p) {
            for (n = m + 1; n < k && '%' == l[n]; ++n);
            var q =
              (m && '!' == l[m - 1]) || (n < k && '1' == l[n]) ? '1' : 'N';
            for (p = m; p < n; ++p) l[p] = q;
            m = n - 1;
          }
        m = 0;
        for (n = 'L'; m < k; ++m)
          (p = l[m]),
            'L' == n && '1' == p ? (l[m] = 'L') : e.test(p) && (n = p);
        for (m = 0; m < k; ++m)
          if (d.test(l[m])) {
            for (n = m + 1; n < k && d.test(l[n]); ++n);
            p = 'L' == (n < k ? l[n] : 'L');
            q = 'L' == (m ? l[m - 1] : 'L') || p ? 'L' : 'R';
            for (p = m; p < n; ++p) l[p] = q;
            m = n - 1;
          }
        for (var n = [], r, m = 0; m < k; )
          if (f.test(l[m])) {
            p = m;
            for (++m; m < k && f.test(l[m]); ++m);
            n.push(new b(0, p, m));
          } else {
            var t = m,
              q = n.length;
            for (++m; m < k && 'L' != l[m]; ++m);
            for (p = t; p < m; )
              if (g.test(l[p])) {
                t < p && n.splice(q, 0, new b(1, t, p));
                t = p;
                for (++p; p < m && g.test(l[p]); ++p);
                n.splice(q, 0, new b(2, t, p));
                t = p;
              } else ++p;
            t < m && n.splice(q, 0, new b(1, t, m));
          }
        1 == n[0].level &&
          (r = h.match(/^\s+/)) &&
          ((n[0].from = r[0].length), n.unshift(new b(0, 0, r[0].length)));
        1 == A(n).level &&
          (r = h.match(/\s+$/)) &&
          ((A(n).to -= r[0].length), n.push(new b(0, k - r[0].length, k)));
        2 == n[0].level && n.unshift(new b(1, n[0].to, n[0].to));
        n[0].level != A(n).level && n.push(new b(n[0].level, k, k));
        return n;
      };
    })();
  q.version = '5.2.0';
  return q;
});
